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

(-)a/src/internet/model/ipv4-raw-socket-impl.cc (-2 / +46 lines)
 Lines 182-187    Link Here 
182
    }
182
    }
183
  InetSocketAddress ad = InetSocketAddress::ConvertFrom (address);
183
  InetSocketAddress ad = InetSocketAddress::ConvertFrom (address);
184
  m_dst = ad.GetIpv4 ();
184
  m_dst = ad.GetIpv4 ();
185
  SetIpTos (ad.GetTos ());
186
185
  return 0;
187
  return 0;
186
}
188
}
187
int 
189
int 
 Lines 201-207    Link Here 
201
Ipv4RawSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
203
Ipv4RawSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
202
{
204
{
203
  NS_LOG_FUNCTION (this << p << flags);
205
  NS_LOG_FUNCTION (this << p << flags);
204
  InetSocketAddress to = InetSocketAddress (m_dst, m_protocol);
206
  InetSocketAddress to = InetSocketAddress (m_dst, m_protocol, GetIpTos ());
205
  return SendTo (p, flags, to);
207
  return SendTo (p, flags, to);
206
}
208
}
207
int 
209
int 
 Lines 218-227    Link Here 
218
    {
220
    {
219
      return 0;
221
      return 0;
220
    }
222
    }
223
221
  InetSocketAddress ad = InetSocketAddress::ConvertFrom (toAddress);
224
  InetSocketAddress ad = InetSocketAddress::ConvertFrom (toAddress);
222
  Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
225
  Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
223
  Ipv4Address dst = ad.GetIpv4 ();
226
  Ipv4Address dst = ad.GetIpv4 ();
224
  Ipv4Address src = m_src;
227
  Ipv4Address src = m_src;
228
  uint8_t tos = ad.GetTos ();
229
230
  uint8_t priority = GetPriority ();
231
  if (tos)
232
    {
233
      SocketIpTosTag ipTosTag;
234
      ipTosTag.SetTos (tos);
235
      // This packet may already have a SocketIpTosTag (see BUG 2440)
236
      p->ReplacePacketTag (ipTosTag);
237
      priority = IpTos2Priority (tos);
238
    }
239
  if (priority)
240
    {
241
      SocketPriorityTag priorityTag;
242
      priorityTag.SetPriority (priority);
243
      p->ReplacePacketTag (priorityTag);
244
    }
245
246
  if (IsManualIpTtl () && GetIpTtl () != 0 && !dst.IsMulticast () && !dst.IsBroadcast ())
247
    {
248
      SocketIpTtlTag tag;
249
      tag.SetTtl (GetIpTtl ());
250
      p->AddPacketTag (tag);
251
    }
252
225
  if (ipv4->GetRoutingProtocol ())
253
  if (ipv4->GetRoutingProtocol ())
226
    {
254
    {
227
      Ipv4Header header;
255
      Ipv4Header header;
 Lines 357-363    Link Here 
357
          tag.SetRecvIf (incomingInterface->GetDevice ()->GetIfIndex ());
385
          tag.SetRecvIf (incomingInterface->GetDevice ()->GetIfIndex ());
358
          copy->AddPacketTag (tag);
386
          copy->AddPacketTag (tag);
359
        }
387
        }
360
      if (m_protocol == 1)
388
389
      //Check only version 4 options
390
      if (IsIpRecvTos ())
391
        {
392
          SocketIpTosTag ipTosTag;
393
          ipTosTag.SetTos (ipHeader.GetTos ());
394
          copy->AddPacketTag (ipTosTag);
395
        }
396
397
      if (IsIpRecvTtl ())
398
        {
399
          SocketIpTtlTag ipTtlTag;
400
          ipTtlTag.SetTtl (ipHeader.GetTtl ());
401
          copy->AddPacketTag (ipTtlTag);
402
        }
403
404
     if (m_protocol == 1)
361
        {
405
        {
362
          Icmpv4Header icmpHeader;
406
          Icmpv4Header icmpHeader;
363
          copy->PeekHeader (icmpHeader);
407
          copy->PeekHeader (icmpHeader);
(-)a/src/internet/model/ipv6-raw-socket-impl.cc (-1 / +30 lines)
 Lines 225-230    Link Here 
225
  Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
225
  Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
226
  Ipv6Address dst = ad.GetIpv6 ();
226
  Ipv6Address dst = ad.GetIpv6 ();
227
227
228
  if (IsManualIpv6Tclass ())
229
    {
230
      SocketIpv6TclassTag ipTclassTag;
231
      ipTclassTag.SetTclass (GetIpv6Tclass ());
232
      p->AddPacketTag (ipTclassTag);
233
    }
234
235
  if (IsManualIpv6HopLimit () && GetIpv6HopLimit () != 0 && !dst.IsMulticast ())
236
    {
237
      SocketIpv6HopLimitTag tag;
238
      tag.SetHopLimit (GetIpv6HopLimit ());
239
      p->AddPacketTag (tag);
240
    }
241
228
  if (ipv6->GetRoutingProtocol ())
242
  if (ipv6->GetRoutingProtocol ())
229
    {
243
    {
230
      Ipv6Header hdr;
244
      Ipv6Header hdr;
 Lines 418-424    Link Here 
418
            }
432
            }
419
        }
433
        }
420
434
421
      // Should check via getsockopt ()..
435
      // Should check via getsockopt ().
422
      if (IsRecvPktInfo ())
436
      if (IsRecvPktInfo ())
423
        {
437
        {
424
          Ipv6PacketInfoTag tag;
438
          Ipv6PacketInfoTag tag;
 Lines 427-432    Link Here 
427
          copy->AddPacketTag (tag);
441
          copy->AddPacketTag (tag);
428
        }
442
        }
429
443
444
      // Check only version 6 options
445
      if (IsIpv6RecvTclass ())
446
        {
447
          SocketIpv6TclassTag ipTclassTag;
448
          ipTclassTag.SetTclass (hdr.GetTrafficClass ());
449
          copy->AddPacketTag (ipTclassTag);
450
        }
451
452
      if (IsIpv6RecvHopLimit ())
453
        {
454
          SocketIpv6HopLimitTag ipHopLimitTag;
455
          ipHopLimitTag.SetHopLimit (hdr.GetHopLimit ());
456
          copy->AddPacketTag (ipHopLimitTag);
457
        }
458
430
      copy->AddHeader (hdr);
459
      copy->AddHeader (hdr);
431
      Data data;
460
      Data data;
432
      data.packet = copy;
461
      data.packet = copy;
(-)a/src/internet/model/udp-socket-impl.cc (-3 / +3 lines)
 Lines 421-427    Link Here 
421
UdpSocketImpl::DoSend (Ptr<Packet> p)
421
UdpSocketImpl::DoSend (Ptr<Packet> p)
422
{
422
{
423
  NS_LOG_FUNCTION (this << p);
423
  NS_LOG_FUNCTION (this << p);
424
  if ((m_endPoint == 0) && (InetSocketAddress::IsMatchingType(m_defaultAddress) == true))
424
  if ((m_endPoint == 0) && (Ipv4Address::IsMatchingType(m_defaultAddress) == true))
425
    {
425
    {
426
      if (Bind () == -1)
426
      if (Bind () == -1)
427
        {
427
        {
 Lines 430-436    Link Here 
430
        }
430
        }
431
      NS_ASSERT (m_endPoint != 0);
431
      NS_ASSERT (m_endPoint != 0);
432
    }
432
    }
433
  else if ((m_endPoint6 == 0) && (Inet6SocketAddress::IsMatchingType(m_defaultAddress) == true))
433
  else if ((m_endPoint6 == 0) && (Ipv6Address::IsMatchingType(m_defaultAddress) == true))
434
    {
434
    {
435
      if (Bind6 () == -1)
435
      if (Bind6 () == -1)
436
        {
436
        {
 Lines 692-698    Link Here 
692
      return -1;
692
      return -1;
693
    }
693
    }
694
694
695
    if (IsManualIpv6Tclass ())
695
  if (IsManualIpv6Tclass ())
696
    {
696
    {
697
      SocketIpv6TclassTag ipTclassTag;
697
      SocketIpv6TclassTag ipTclassTag;
698
      ipTclassTag.SetTclass (GetIpv6Tclass ());
698
      ipTclassTag.SetTclass (GetIpv6Tclass ());

Return to bug 2500