[Ns-developers] Requesting help for csma promiscuous mode

Tom Henderson tomh at tomh.org
Sat Jul 5 08:39:02 PDT 2008


craigdo at ee.washington.edu wrote:
>> craig really did not like it at all: he felt that was
>> really completely weird to make the channel have this 
>> kind of logic.
> 
> Yup.  I think this is almost a textbook example of a hack (as in a quick,
> functionally correct, but problematic or hard to understand or maintain
> change).
> 
> What we're doing here is making the correct operation of a nicely
> encapsulated network device object depend on a quite well-hidden behavior of
> another object -- the channel.  This strikes me as a bad practice from a
> software engineering practice.  Someone could come along and wire in a
> "better" channel and not implement the your packet filter since the channel
> has no reason to do such a thing, whence your code would break.  That is
> bad.
> 
> Also, when I think of a channel, I don't think of an entity that has any
> kind of smarts to do packet filtering.  A CSMA channel is a wire, and the
> wire should just deliver simulated EM signals.  I don't know of any wires
> with processors built into them -- it's the devices that are attached to the
> wire that should figure out which signals on the wire to listen to.  So from
> an understandability perspective, I would not expect this functionality to
> be in the channel at all.  It would surprise the heck out of me to be
> debugging a problem and find this filtering in a "wire."
> 
> There is a problem, though, in that we don't have a way to associate signals
> propagated through the medium with a transmitter except with packet
> addressing information.  You clearly have a need to do this.
> 
> Last week I would have suggested adding a "this packet is from me" tag on
> the transmitted packets; but we discovered in separate socket exercise that
> you really need to be able to find and remove tags for multiple hop
> scenarios.  Unless I'm mistaken you simply can't do this now.  I think you
> could iterate through the tags and look for the last one, though (are there
> limitations on the number of tags you can have in a packet?).
> 
> So, on one hand I think it is bad from a software engineering and usability
> perspective to add the quick filtering hack to the channel; but in the
> presence of spoofing it seems to be the only reasonable way to get what you
> need done without either plumbing a new device parameter through the channel
> or updating the tags code to make it usable in this situation.
> 
> So, at this point, I wouldn't object to adding the "hack" with an XXX
> comment to CSMA and filing a bug against the tags code to enable us to get
> rid of the "hack."  A tags fix would then address two related bugs.

While I agree with your points, regarding the implementation, another 
way would be to propagate carrying the NetDevice pointer explicitly 
through the send/receive calls.  That is, CsmaChannel::Send takes an 
additional "Ptr<NetDevice> from" argument, which is copied to the 
CsmaNetDevice::Receive() method.  This would seem to be easier from a 
code reading and debugging perspective.

Tom


More information about the Ns-developers mailing list