View | Details | Raw Unified | Return to bug 294
Collapse All | Expand All

(-)a/src/devices/bridge/bridge-net-device.cc (-9 / +1 lines)
 Lines 290-305    Link Here 
290
  return true;
290
  return true;
291
}
291
}
292
292
293
294
Address
293
Address
295
BridgeNetDevice::GetMulticast (void) const
294
BridgeNetDevice::GetMulticast (Ipv4Address multicastGroup) const
296
{
297
  return Mac48Address ("01:00:5e:00:00:00");
298
}
299
300
301
Address
302
BridgeNetDevice::MakeMulticastAddress (Ipv4Address multicastGroup) const
303
{
295
{
304
 NS_LOG_FUNCTION (this << multicastGroup);
296
 NS_LOG_FUNCTION (this << multicastGroup);
305
 Mac48Address multicast = Mac48Address::GetMulticast (multicastGroup);
297
 Mac48Address multicast = Mac48Address::GetMulticast (multicastGroup);
(-)a/src/devices/bridge/bridge-net-device.h (-2 / +1 lines)
 Lines 96-103    Link Here 
96
  virtual bool IsBroadcast (void) const;
96
  virtual bool IsBroadcast (void) const;
97
  virtual Address GetBroadcast (void) const;
97
  virtual Address GetBroadcast (void) const;
98
  virtual bool IsMulticast (void) const;
98
  virtual bool IsMulticast (void) const;
99
  virtual Address GetMulticast (void) const;
99
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
100
  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
101
  virtual bool IsPointToPoint (void) const;
100
  virtual bool IsPointToPoint (void) const;
102
  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
101
  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
103
  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
102
  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
(-)a/src/devices/csma/csma-net-device.cc (-8 / +1 lines)
 Lines 796-809    Link Here 
796
}
796
}
797
797
798
  Address 
798
  Address 
799
CsmaNetDevice::GetMulticast (void) const
799
CsmaNetDevice::GetMulticast (Ipv4Address multicastGroup) const
800
{
801
  NS_LOG_FUNCTION_NOARGS ();
802
  return Mac48Address::GetMulticastPrefix ();
803
}
804
805
  Address 
806
CsmaNetDevice::MakeMulticastAddress (Ipv4Address multicastGroup) const
807
{
800
{
808
  NS_LOG_FUNCTION (multicastGroup);
801
  NS_LOG_FUNCTION (multicastGroup);
809
802
(-)a/src/devices/csma/csma-net-device.h (-2 / +1 lines)
 Lines 319-325    Link Here 
319
  virtual bool IsBroadcast (void) const;
319
  virtual bool IsBroadcast (void) const;
320
  virtual Address GetBroadcast (void) const;
320
  virtual Address GetBroadcast (void) const;
321
  virtual bool IsMulticast (void) const;
321
  virtual bool IsMulticast (void) const;
322
  virtual Address GetMulticast (void) const;
323
322
324
  /**
323
  /**
325
   * \brief Make and return a MAC multicast address using the provided
324
   * \brief Make and return a MAC multicast address using the provided
 Lines 343-349    Link Here 
343
   * \see Mac48Address
342
   * \see Mac48Address
344
   * \see Address
343
   * \see Address
345
   */
344
   */
346
  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
345
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
347
346
348
  /**
347
  /**
349
   * Is this a point to point link?
348
   * Is this a point to point link?
(-)a/src/devices/point-to-point/point-to-point-net-device.cc (-13 / +1 lines)
 Lines 372-391    Link Here 
372
  return false;
372
  return false;
373
}
373
}
374
374
375
//
376
// Since we return false in the IsMulticast call, calls to other multicast
377
// related methods returns are undefined according to the base class.  So we
378
// can freely make something up, which is the base of the MAC multicast
379
// address space.
380
//
381
  Address 
375
  Address 
382
PointToPointNetDevice::GetMulticast (void) const
376
PointToPointNetDevice::GetMulticast (Ipv4Address multicastGroup) const
383
{
384
  return Mac48Address ("01:00:5e:00:00:00");
385
}
386
387
  Address 
388
PointToPointNetDevice::MakeMulticastAddress (Ipv4Address multicastGroup) const
389
{
377
{
390
  return Mac48Address ("01:00:5e:00:00:00");
378
  return Mac48Address ("01:00:5e:00:00:00");
391
}
379
}
(-)a/src/devices/point-to-point/point-to-point-net-device.h (-2 / +1 lines)
 Lines 249-256    Link Here 
249
  virtual Address GetBroadcast (void) const;
249
  virtual Address GetBroadcast (void) const;
250
250
251
  virtual bool IsMulticast (void) const;
251
  virtual bool IsMulticast (void) const;
252
  virtual Address GetMulticast (void) const;
252
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
253
  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
254
253
255
  virtual bool IsPointToPoint (void) const;
254
  virtual bool IsPointToPoint (void) const;
256
255
(-)a/src/devices/wifi/wifi-net-device.cc (-6 / +1 lines)
 Lines 253-264    Link Here 
253
  return false;
253
  return false;
254
}
254
}
255
Address 
255
Address 
256
WifiNetDevice::GetMulticast (void) const
256
WifiNetDevice::GetMulticast (Ipv4Address multicastGroup) const
257
{
258
  return Mac48Address::GetMulticastPrefix ();
259
}
260
Address 
261
WifiNetDevice::MakeMulticastAddress (Ipv4Address multicastGroup) const
262
{
257
{
263
  return Mac48Address::GetMulticast (multicastGroup);
258
  return Mac48Address::GetMulticast (multicastGroup);
264
}
259
}
(-)a/src/devices/wifi/wifi-net-device.h (-2 / +1 lines)
 Lines 92-99    Link Here 
92
  virtual bool IsBroadcast (void) const;
92
  virtual bool IsBroadcast (void) const;
93
  virtual Address GetBroadcast (void) const;
93
  virtual Address GetBroadcast (void) const;
94
  virtual bool IsMulticast (void) const;
94
  virtual bool IsMulticast (void) const;
95
  virtual Address GetMulticast (void) const;
95
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
96
  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
97
  virtual bool IsPointToPoint (void) const;
96
  virtual bool IsPointToPoint (void) const;
98
  virtual bool Send(Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
97
  virtual bool Send(Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
99
  virtual Ptr<Node> GetNode (void) const;
98
  virtual Ptr<Node> GetNode (void) const;
(-)a/src/internet-stack/arp-ipv4-interface.cc (-1 / +1 lines)
 Lines 139-145    Link Here 
139
            "ArpIpv4Interface::SendTo (): Sending multicast packet over "
139
            "ArpIpv4Interface::SendTo (): Sending multicast packet over "
140
            "non-multicast device");
140
            "non-multicast device");
141
141
142
          hardwareDestination = GetDevice ()->MakeMulticastAddress(dest);
142
          hardwareDestination = GetDevice ()->GetMulticast(dest);
143
          found = true;
143
          found = true;
144
        }
144
        }
145
      else
145
      else
(-)a/src/node/net-device.h (-27 / +2 lines)
 Lines 142-172    Link Here 
142
  virtual bool IsMulticast (void) const = 0;
142
  virtual bool IsMulticast (void) const = 0;
143
143
144
  /**
144
  /**
145
   * \brief Return the MAC multicast base address used when mapping multicast
146
   * groups to MAC multicast addresses.
147
   *
148
   * Typically when one constructs a multicast MAC addresses, some bits from
149
   * the IP multicast group are copied into a corresponding MAC multicast 
150
   * group.  In EUI-48, for example, the low order 23 bits of the multicast
151
   * group are copied to the MAC multicast group base address.
152
   *
153
   * This method allows access to the underlying MAC multicast group base 
154
   * address.  It is expected that in most cases, a net device client will
155
   * allow the net device to perform the actual construction of the multicast
156
   * address.  Use of this method is discouraged unless you have a good reason
157
   * to perform a custom mapping.  You should prefer 
158
   * NetDevice::MakeMulticastAddress which will do the RFC-specified mapping
159
   * for the net device in question.
160
   *
161
   * \return The multicast address supported by this net device.
162
   *
163
   * \warning Calling this method is invalid if IsMulticast returns not true.
164
   * The method NS_ASSERTs if the device is not a multicast device.
165
   * \see NetDevice::MakeMulticastAddress
166
   */
167
  virtual Address GetMulticast (void) const = 0;
168
  
169
  /**
170
   * \brief Make and return a MAC multicast address using the provided
145
   * \brief Make and return a MAC multicast address using the provided
171
   *        multicast group
146
   *        multicast group
172
   *
147
   *
 Lines 179-185    Link Here 
179
   * encapsulated in an abstract Address to avoid dependencies on the exact
154
   * encapsulated in an abstract Address to avoid dependencies on the exact
180
   * MAC address format.
155
   * MAC address format.
181
   *
156
   *
182
   * A default imlementation of MakeMulticastAddress is provided, but this
157
   * A default imlementation of GetMulticast is provided, but this
183
   * method simply NS_ASSERTS.  In the case of net devices that do not support
158
   * method simply NS_ASSERTS.  In the case of net devices that do not support
184
   * multicast, clients are expected to test NetDevice::IsMulticast and avoid
159
   * multicast, clients are expected to test NetDevice::IsMulticast and avoid
185
   * attempting to map multicast packets.  Subclasses of NetDevice that do
160
   * attempting to map multicast packets.  Subclasses of NetDevice that do
 Lines 196-202    Link Here 
196
   * \see Address
171
   * \see Address
197
   * \see NetDevice::IsMulticast
172
   * \see NetDevice::IsMulticast
198
   */
173
   */
199
  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const = 0;
174
  virtual Address GetMulticast (Ipv4Address multicastGroup) const = 0;
200
  
175
  
201
  /**
176
  /**
202
   * \return value of m_isPointToPoint flag
177
   * \return value of m_isPointToPoint flag
(-)a/src/node/simple-net-device.cc (-6 / +1 lines)
 Lines 148-159    Link Here 
148
  return false;
148
  return false;
149
}
149
}
150
Address 
150
Address 
151
SimpleNetDevice::GetMulticast (void) const
151
SimpleNetDevice::GetMulticast (Ipv4Address multicastGroup) const
152
{
153
  return Mac48Address::GetMulticastPrefix ();
154
}
155
Address 
156
SimpleNetDevice::MakeMulticastAddress (Ipv4Address multicastGroup) const
157
{
152
{
158
  return Mac48Address::GetMulticast (multicastGroup);
153
  return Mac48Address::GetMulticast (multicastGroup);
159
}
154
}
(-)a/src/node/simple-net-device.h (-2 / +1 lines)
 Lines 59-66    Link Here 
59
  virtual bool IsBroadcast (void) const;
59
  virtual bool IsBroadcast (void) const;
60
  virtual Address GetBroadcast (void) const;
60
  virtual Address GetBroadcast (void) const;
61
  virtual bool IsMulticast (void) const;
61
  virtual bool IsMulticast (void) const;
62
  virtual Address GetMulticast (void) const;
62
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
63
  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
64
  virtual bool IsPointToPoint (void) const;
63
  virtual bool IsPointToPoint (void) const;
65
  virtual bool Send(Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
64
  virtual bool Send(Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
66
  virtual bool SendFrom(Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
65
  virtual bool SendFrom(Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);

Return to bug 294