[Ns-developers] virtual netdevice (Was: release update [feedback needed])

Gustavo Carneiro gjcarneiro at gmail.com
Wed Jun 17 04:15:45 PDT 2009


OK, I think gjc/ns-3-tap-netdevice (actually VirtualNetDevice) is ready to
merge.  Any last minute objections?

2009/6/12 Gustavo Carneiro <gjcarneiro at gmail.com>

>
>
> 2009/6/11 Tom Henderson <tomh at tomh.org>
>
> Gustavo Carneiro wrote:
>>
>>>
>>>
>>> 2009/6/11 Gustavo Carneiro <gjcarneiro at gmail.com <mailto:
>>> gjcarneiro at gmail.com>>
>>>
>>>
>>>
>>>    2009/6/11 Gustavo Carneiro <gjcarneiro at gmail.com
>>>    <mailto: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 <mailto: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.
>>>
>>
>> OK, I did not intend to force you to remove it if you thought it was
>> useful; I was pointing out that you seemed to agree originally that this
>> could have been rolled together (as it is now) but then did not change it.
>>  My main point was that it seemed that users may be hard pressed to know
>> whether promiscReceiveCallback or receiveCallback is set, and therefore
>> which method to call.  I don't think there is any issue with your latest
>> code since you merged them.
>
>
> I couldn't help but merge them due to the csma trace sources that I copied
> over to VirtualNetDevice needing more parameters than the non-promisc
> Receive had to offer.
>
> Even now things are not 100% aligned because CsmaNetDevice::PromiscSniffer
> gives a packet with EthernetHeader included, while VirtualNetDevice does not
> (because it would make it less generic if it was constrained to mac48
> addresses), but it's the best that can be done.
>
>
>>
>>
>>>    Unfortunately now the example program is failing with a packet tag
>>>    error.  Any idea what could be wrong?
>>>
>>>
>>> Replying to myself.  SocketAddressTag was being added twice when the
>>> packet exists one UDP socket and is reinjected to enter another UDP socket,
>>> and NS-3 does not like it.  Calling Packet::RemoveAllPacketTags took care of
>>> it.
>>>
>>>
>>
>> this is perhaps a nit, but RemoveAllPacketTags() may have side effects for
>> some users; does RemovePacketTag (SocketAddressTag) not work here?
>
>
> Done.
>
>
> --
> Gustavo J. A. M. Carneiro
> INESC Porto, Telecommunications and Multimedia Unit
> "The universe is always one step beyond logic." -- Frank Herbert
>



-- 
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