On Fri, Sep 13, 2013 at 10:45:57AM +0200, Martin Pieuchot wrote:
> > No, that's utterly stupid.  The interface index is a value that is
> > supposed to be consistent across the system.  How should it be synced
> > with other userland tools?  How would you handle it in if_nametoindex
> > and friends?
> 
> So what do *you* suggest which is not utterly stupid?
> 

I stopped suggesting things that get ignored.

> I can't see where it is written that the interface index should be
> consistent, from the RFC 1156, I read:
> 
>         ifIndex { ifEntry 1 }
> 
>         A unique value for each interface.  Its value ranges
>         between 1 and the value of ifNumber.  The value for each
>         interface must remain constant at least from one re-
>         initialization of the entity's network management system
>         to the next re-initialization.
> 

I read your statement and read the RFC text and I totally don't get
how they fit together.  Isn't the RFC saying the opposite of what
you're saying?  I will get some coffee now and try to read it again
afterwards.

> 
> > As I said before: it is not a big issue for snmpd and I can live with
> > the fact that your changes might confuse SNMP clients a bit.  Just go
> > ahead, but
> 
> Well it looks like a big issue because you keep complaining.
> 
> Would you exclaiming what "confusing SNMP clients" means?  What breaks?
> Can it be solved?  What is the technical problem here?
> 

Well

> > > In the end we need two different tables, one with an unique index per
> > > interface (to avoid passing pointers in kernel) and another one with
> > > the biggest index equals to the number of interfaces (to not confuse
> > > snmp).  IMHO we don't need these two tables in the kernel.
> > > 
> > 
> > please read the history: if_index _was_ created for SNMP.  Then it was
> > used for routing and other stuff.  Now you want to use it as a "PID"
> > for something else.  Fine.  But please stop claiming that SNMP is
> > doing anything wrong with if_indexes when they were created FOR SNMP.
> 
> I'm not clamming anything that SNMP is doing wrong, I'm not rewriting
> history, I'm just saying that the actual index generation code is broken
> for SNMP because it doesn't returns a value between 1 and the number of
> interfaces.

Yes, in theory if_index should be fixed and return a consistent number
between 1 and the number of interfaces.  But this is obviously
difficult and I'm not sure if it's worth the effort.  So the "hack"
that you're going to remove was a best effort.  But putting another
interface index abstraction layer in userland (via snmpd or some
shared db) is just not the right way to do it.  We either have a
reliable if_index from the kernel or we don't.  But inventing another
thing in userland doesn't make sense to me.

So let's get back to the technical part:

- Do you even have to use if_index?  Is it performance critical or
could you lookup the interface by name?

- I think introducing a new kernel-only if_id for your needs would be
the better approach.  Then we could fix if_index to conform to the
definition "between 1 and number of interfaces".

- But I can also live with a modified if_index that is unreliable.
What am I suggesting?  In this situation: just continue.

Reyk

Reply via email to