On Fri, Oct 13, 2000 at 06:00:15AM +0200, Ben Greear wrote:
> Andi Kleen wrote:
> >
> > On Wed, Oct 11, 2000 at 08:54:21AM +0200, Ben Greear wrote:
> > > I'm trying to write a hash structure that will hold the devices,
> > > hashed by both name and index.
> > >
> > > It seems that the devices are first named generically: eth%d,
> > > and at some later date, are initialized correctly. This, of course,
> > > completely screws up any name-based hashing I might have had...
> > >
> > > If names can change at any time, then I'll just quit trying to
> > > hash on them. However, if they only change up to some certain
> > > step, then I'll be able to just initialize the hash list after that.
> > >
> > > Are the device names (for the devices in dev_base) un-changable after
> > > some point? What is this point? (Would 'at-the-first-dev-add' be ok?)
> >
> > Root can change them anytime using SIOCSIFNAME. I wrote a small program
> > to rename net devices based on the MAC address, which used it successfully
> > (so eth0 was always the same adapter, no matter how the modules were loaded)
>
> What if I remove the device from the hash before the name change, and
> add it back again after? That should preserve the hash, and I assume that
> the devices will not be renamed regularly, so the slight performance hit
> should not be a problem. I'll probably have to lock the structures
> (read/write dev_base), just as the register_netdevice() does...
I am not sure I understand your problem. You probably want two hash
tables, one for the ifindex and one for the ifname. These are separated.
When ifindex or name change you update the appropiate hash table chains under
their lock.
> Do you know of any other ways that the dev name could be changed
> after it's added to the list?
None.
>
> >
> > >
> > > If this is un-workable, I can still hash on ifindex I think, it's
> > > immutable, right?
> >
> > It is inmutable correct, and easier to hash on anyways.
>
> Actually, I am currently hashing on both. I think that speeding up the
> search based on name is important too, because if you are binding to an
> interface, for example, then you must first map the name into an ifindex.
>
> In other words, binding to each of 4000 interfaces by name could be
> quite painful if you're using a linear search each time...
>
> I mean, doesn't everyone need 4k VLAN interfaces?? :)
Apparently people do, I recently had to fix a O(n^2) algorithm in ifconfig
which made printout of thousands of interfaces very slow ...
-Andi
|