[Click] Scoping/naming issues
Ian Rose
ianrose at eecs.harvard.edu
Tue Jan 18 10:34:45 EST 2011
If I am thinking this through correctly, IMHO it wouldn't be a good idea
to allow elementclasses to do this. Reason being that in some cases you
could create port connection errors merely through declaring multiple
elements of your new elementclass type. This would be an unexpected and
confusing error since its impossible to do currently. AFAIK currently
there are no errors that can occur merely by *declaring* too many
elements of some type. So this would introduce a whole new category of
error. Some examples:
This would be legal:
--------------------------------------
fd::FromDevice(...);
elementclass Bar {
fd[0] -> Print() -> [0]output;
}
a::Bar() -> Discard();
--------------------------------------
I think this should complain that fd[0] is being used twice (port
connection error), although it may take a minute to see why that's the
case (and would be much trickier to see in a more complex config):
--------------------------------------
fd::FromDevice(...);
elementclass Bar {
fd[0] -> Print() -> [0]output;
}
a::Bar() -> Discard();
b::Bar() -> Discard();
--------------------------------------
In order to cause this same error currently (without the proposed
elementclass enhancement) you'd have to do this, which I think makes the
error more obvious:
--------------------------------------
fd::FromDevice(...);
elementclass Bar {
input[0] -> Print() -> [0]output;
}
fd[0] -> a::Bar() -> Discard();
fd[0] -> b::Bar() -> Discard();
--------------------------------------
Just my $0.02.
- Ian
On 01/17/2011 07:55 PM, Philip Prindeville wrote:
> Yeah, it especially makes sense to have arpfoo be global if it needs to be accessible from two different elementclass's, one that deals with the IP flow (input [0] and output [0]) and another one that deals strictly with the ARP request/reply flow (input [1] and output [1]).
>
> Someone else will have to come up with the patches... I've not yet dabbled in the code itself.
>
>
> On 1/17/11 4:35 PM, Eddie Kohler wrote:
>> Hi Philip,
>>
>> I can see why you thought compound elements would work that way, but they don't. They are very strictly encapsulated: all connections to other elements must take place through explicit inputs and outputs.
>>
>> I admit it would make sense to do it the way you've imagined. Patches welcome...
>>
>> Eddie
>>
>>
>> On 1/15/11 2:53 PM, Philip Prindeville wrote:
>>> I've got a configuration where I do:
>>>
>>> ...
>>> arpfoo :: ARPQuerier(...);
>>>
>>> elementclass Bar {
>>> ...
>>> class :: classifier(...);
>>> ...
>>> class [2] -> [1] arpfoo;
>>> ...
>>> }
>>>
>>>
>>> but it complains that "unknown element class 'arpfoo'" in a few places, and that input 1 isn't used...
>>>
>>> So I'm confused. Everything is scoped globally... even stuff defined within an elementclass gets scoped globally.
>>>
>>> Why then can't I access a global variable from within an elementclass's scope?
>>>
>>> What am I missing?
>>>
>>> Thanks,
>>>
>>> -Philip
>
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
More information about the click
mailing list