[Ns-developers] NS-3 promiscuous mode for NetDevice
Gustavo Carneiro
gjcarneiro at gmail.com
Sat Jul 5 17:22:51 PDT 2008
2008/7/5 Tom Henderson <tomh at tomh.org>:
> Gustavo Carneiro wrote:
>
>>
>>
>> 2008/7/5 Tom Henderson <tomh at tomh.org <mailto:tomh at tomh.org>>:
>>
>>
>> Mathieu Lacage wrote:
>>
>> hi,
>>
>> To summarize a lengthy discussion on irc, gustavo and I agreed
>> that we
>> might need to add couple of features to the NetDevice base class to
>> support that use-case:
>> - allow the specification of a from address when sending a
>> packet to a
>> NetDevice
>> - allow the listener of a NetDevice to get the source and
>> destination
>> address of an incoming packet
>> - allow a NetDevice to be put into promiscuous mode
>>
>> The details of the API needed to support that are not very
>> complicated
>> but they all depend on making a couple of decisions on API
>> stability: it
>> is possible to add the above features without breaking existing
>> API by
>> adding new methods but doing so would duplicate nearly-similar
>> existing
>> methods so, it is also possible to break the existing API and
>> methods to
>> make them handle this new case. Gustavo does not want to break
>> the API
>> because he does not want to make it harder to migrate from ns-3.1
>> to
>> newer versions. I want to break it because I don't want to
>> introduce
>> cruft in our APIs. Tom, craig, opinions ?
>>
>>
>> I agree with Gustavo's point to look at the specifics, maybe
>> side-by-side. In general, I care about long term sanity of the APIs
>> and I probably am less concerned at this moment about stability of
>> an API that is public but may be practically internal from a user
>> script level. Also, I have less heartburn over an API change where
>> the fix just requires user to look at the documentation and figure
>> out why it didn't compile, rather than one that changes behavior
>> subtly.
>>
>> In this case, I was surprised to look at Gustavo's code and see the
>> bridge functionality implemented within a special bridge device
>> rather than on top of our usual devices. Could we instead implement
>> bridging as a function on top of existing devices, and would that
>> avoid the need to break current API?
>>
>>
>> What do you mean by bridge functionality? If you mean the SendFrom API
>> and promiscuous mode, then I don't think it is possible to put it on top of
>> NetDevices. If you mean the bridging logic itself (MAC frame forwarding) it
>> _is_ already on top of existing NetDevices: BridgeNetDevice is on top of
>> each NetDevice (called "bridge ports" in this context).
>>
>
> Sorry, I misread your csma-bridge.cc example as connecting to the
> terminals. I agree with the overall approach.
>
>
>> As I explained already, I am doing a BridgeNetDevice because:
>>
>> 1- Linux bridging does it (see
>> http://www.linuxfoundation.org/en/Net:Bridge);
>>
>> 2- It is a more natural way to define how a bridge interacts with a local
>> IPv4 stack.
>>
>> I also think that while we are on this exercise, it would be helpful
>> to architecturally plan for how we are going to deal with adding
>> VLANs and MPLS.
>>
>>
>> Actually my colleague Pedro Fortuna is currently looking at implementing
>> MPLS (data plane only) functionality in NS-3. But I'm afraid he's a bit shy
>> and does not like to get involved in ns-developers discussions until things
>> are ready :) Also it is not clear yet what portion of our MPLS code will be
>> generic enough for inclusion in NS-3, since we're integrating it with a very
>> specific research scenario.
>>
>> But it's like I mentioned when I started this thread. We are working in a
>> research scenario that is hard to explain, involving ethernet bridging,
>> encapsulation, and MPLS. Instead I am implementing a Learning Bridge
>> because it exercises most of the missing functionality in NS-3 and is a well
>> known problem and easy to explain.
>>
>
> It would be nice if we can morph your design at some point to also include
> a tun interface type. (I'm not asking you to do work on it, but rather that
> it would be nice to develop rough ideas of how tunnel, VLANs, etc. are going
> to work and whether our NetDevice and Node API is complete enough, during
> this release cycle).
I already did L2 tunneling (L2-over-IP) long before ns-3.1, and submitted
the VirtualNetDevice, which is like a "tap" interface. I don't really have
a use case for a "tun" (IP-over-IP) interface yet. Presumably it would be
used by mobile IP, but I don't know for sure. Personally I have no interest
in pursuing "tun" interfaces in the foreseeable future, but I agree it would
be an interesting and useful project for someone to tackle.
--
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