in_ifinit() fix for SIOCSIFADDR
Matthew Dillon
dillon at apollo.backplane.com
Sun May 25 14:27:23 PDT 2008
:After patch, in_ifinit() will remove ia from hash table if in_ifinit()
:fails, so for 2) and 3) there is no need to remove ia again
:
:For 1), ia was installed into hash table only if
:ia->ia_addr.sin_family == AF_INET. This forms the condition test
:before the XXX comment. IMHO, using sin_family to indicate, whether
:ia is in hash table or not, is not a good idea, that's why I added XXX
:comment. Once I parallelize ia hash table, I will add a flag to
:indicate whether ia is in hash table or not.
Ok, then I'm fine with it. After reading the first part of your
answer I was going to suggest having a flag. It's a good idea
even if the flag state is known, along with adding a few KKASSERT's
to catch coding mistakes.
:I mean following code segment in in_ifinit() (~839 in.c rev1.34):
: if ((error = rtinit(&ia->ia_ifa, RTM_ADD, flags)) != 0) {
: ia->ia_addr = oldaddr;
: return (error);
: }
:ia's address is restored to oldaddr, but ia itself is left in hash
:bucket indexed by newaddr's hash value.
:
:Best Regards,
:sephe
:
:--
:Live Free or Die
Ok. Yes, that should definitely be moved to the correct bucket.
-Matt
Matthew Dillon
<dillon at backplane.com>
More information about the Submit
mailing list