[Ns-developers] virtual netdevice (Was: release update [feedback needed])
Gustavo Carneiro
gjcarneiro at gmail.com
Thu Jun 11 08:06:06 PDT 2009
2009/6/11 Gustavo Carneiro <gjcarneiro at gmail.com>
> (changing subject or else a lot of disparate topics are mixed into the same
> thread!)
>
> 2009/6/10 Tom Henderson <tomh at tomh.org>
> [...]
>
>>
>>>
>>>
>>> Gustavo,
>>> - I thought you were going to clean up the Receive/PromiscReceive
>>> separate functions?
>>>
>>>
>>> I don't understand the concern here, or what I should do. If I remove
>>> one of them, which one do I keep? How can we be sure it's the right one?
>>>
>>> - Receive() is simpler to use and usually what we want, but does not
>>> support simulating frames received by a bridge;
>>>
>>> - PromiscReceive takes more parameters, harder to use if you want to do
>>> something simpler, but needed for certain scenarios.
>>>
>>
>> My comment was that all of the other net devices call the promisc callback
>> out of Receive(), but here, the user has to pick PromiscReceive or Receive()
>> and I'm not sure how he or she picks the right one.
>>
>> Can you describe the use case for PromiscReceive? You implied bridging
>> but I'm not seeing it.
>
>
> I cannot possibly know all the use cases of VirtualNetDevice. However, not
> supporting PromiscReceive will mean that not all functionality of NetDevice
> is made available by VirtualNetDevice. Indeed, one use case is a "virtual
> bridge port", i.e. a bridge port that is not physical but instead is, for
> example, a TCP link. Why this scenario or others matter is not my job to
> point out, I just don't want to limit functionality if the cost of
> supporting the funcionality is low. You seem to think the cost is high
> because having PromisReceive will confuse users. I think the whole
> VirtualNetDevice is already for advanced users who know what they are
> doing. That's one of the reasons why VirtualNetDevice does not have a
> "helper class". The whole point is that subclassing NetDevice is _a lot_ of
> work, work that is not justified for certain kinds of scenarios, and
> VirtualNetDevice avoids subclassing.
>
That being said, I realized later that it's impossible to align with
CsmaNetDevice's trace sources without the information provided by
PromiscReceive, so I removed Received and renamed PromiscReceive to
Receive. Also renamed SetSendFromCallback to SetSendCallback, for
simplicity. Pushed.
Unfortunately now the example program is failing with a packet tag error.
Any idea what could be wrong?
0x00007fb8a8d7709e in ns3::PacketTagList::Add (this=0xdb48a0,
tag=@0x7fffb16f0530) at ../src/common/packet-tag-list.cc:139
139 NS_ASSERT (cur->tid != tag.GetInstanceTypeId ());
(gdb) bt
#0 0x00007fb8a8d7709e in ns3::PacketTagList::Add (this=0xdb48a0,
tag=@0x7fffb16f0530) at ../src/common/packet-tag-list.cc:139
#1 0x00007fb8a8d5a244 in ns3::Packet::AddPacketTag (this=0xdb4870,
tag=@0x7fffb16f0530) at ../src/common/packet.cc:629
#2 0x00007fb8a8e5547c in ns3::UdpSocketImpl::ForwardUp (this=0xdb4260,
packet={m_ptr = 0x7fffb16f05f0}, ipv4=
--
Gustavo J. A. M. Carneiro
INESC Porto, Telecommunications and Multimedia Unit
"The universe is always one step beyond logic." -- Frank Herbert
More information about the Ns-developers
mailing list