freebsd with flexible iflib nic queues
a7acf629b6
Rod, Jordan and David have more or less given me the OK on this with the understanding that it doesn't change any functionality. It doesn't: these are bug fixes only. No other part of the system should be affected. Of course, since I'm the only one working on NIS, you'll just have to take my word on it. :) Fixes for the following annoyingly subtle bugs: - ypbindproc_setdom_2 is supposed to be declared void *, not boot_t *, and it fails to correctly signal failures back to the ypset(8) command: we need to call one of the svcerr_*() functions (in this case, svcerr_noprog() seems a logical choice -- we're really cheating a bit here because nothing else quite fits) to tell ypset that the attempt to set the binding for a domain failed. If we don't do this, failed ypset attempts either appear (incorrectly) to succeed, or they time out. - The lock handling for child processes isn't quite right. The child broadcaster processes have to release all locks on the binding files and the ypbind.lock file. - The parent ypbind process will SEGV if you do the following: -- start ypbind with the -ypset or -ypsetme flag -- type 'ypwhich -d random_unserved_domain' -- type 'ypset -d random_unserved_domain anyhost' -- type 'ypwhich -d random_unserved_domain' again -- wait about 60 seconds What happens is this: the ypwhich command causes ypbind to fork a broadcaster process that searches for a server for random_unserved_domain. If you then use ypset to force a binding while this process is still alive, the state flags that tell the ypbind parent process that the child is running will be cleared. The second ypwhich command then causes a *second* child process to be forked for random_unserved_domain, which is verbotten. When the first broadcaster exits and tells the parent that it wasn't able to find a server for the domain, the parent clobbers the entry for random_unserved_domain. Then the second broadcaster exits and the same thing happens, only trying to clobber the entry twice causes a SEGV. The fix for this is a slight change in program structure: since we can't have more than one broadcaster for a given domain at a time, we save the pipe descriptors and pid for the child broadcaster in members of the _dom_binding struct for the domain. (As a side effect, we can get rid of the global child_fds variable.) So when rpc_received() finds that it's been asked to do a ypset for a domain for which a broadcaster process exists, it sends a SIGINT to the child to kill it and closes the pipe to the now-dead child. This keeps everything in sync and insures that we don't leak file descriptors. - ping() should be using YPPROC_DOMAIN rather than YPPROC_DOMAIN_NONACK when it does its clnt_call() to the server. - Removed the check for client_handle == NULL in ping() and make client_handle local to ping instead of a member of the _dom_binding struct. This fixes another potential ypset problem: using ypset to force a binding to a machine that has an NIS server but which *doesn't* support the domain we're after can result in permanently bogus bindings. - the 'server OK' message prints the wrong IP address. |
||
---|---|---|
bin | ||
eBones | ||
etc | ||
games | ||
gnu | ||
include | ||
lib | ||
libexec | ||
lkm | ||
release | ||
sbin | ||
secure | ||
share | ||
sys | ||
tools/regression/usr.bin/sed | ||
usr.bin | ||
usr.sbin | ||
COPYRIGHT | ||
CVS-INFO | ||
HW.TROUBLE | ||
Makefile | ||
README | ||
TODO |
----------------------------------------- FreeBSD 2.0 --- ALPHA Release , , ----------------------------------------- /( )` \ \___ / | Welcome to the ALPHA release of FreeBSD 2.0 - the /- _ `-/ ' first public snapshot of our new 4.4BSD Lite based (/\/ \ \ /\ operating system environment. This install proce- / / | ` \ dure is also at the ALPHA stage, and contains only O O ) / | the minimum functionality required by an `-^--'`< ' *EXPERIENCED* person to install the system. (_.) _ ) / It is our hope, of course, that the feedback `.___/` / provided from this snapshot will `-----' / greatly assist us in making the release <----. __ / __ \ of 2.0 much more user friendly. Your <----|====O)))==) \) /==== comments and criticisms are very <----' `--' `.__,' \ valuable to us, so please don't hesitate | | in contacting us! Full details on where and \ / /\ how to provide feedback are given below. ______( (_ / \______/ ,' ,-----' | This install procedure is ALPHA code, and `--{__________) may very possibly *DESTROY* the contents of your ENTIRE DISK! Please do not proceed with this installation unless you've adequately backed up your data first! If any errors occur during this installation, you can see them by toggling over to the alternate screen - type ALT-F2 to switch over, ALT-F1 to switch back to the install screen. The debugging output on the second screen may be very valuable to us in understanding your bug report, so please be sure to take note of it when reporting any failures in the installation! Thanks! Menus and scrolling output windows may be traversed with the arrow and Page Up/Page Down keys. To suspend the installation at any point, hit ESC twice. Hitting TAB will move the focus to different controls. If you've ever dealt with a DOS installation, you'll know how to deal with this. For a more complete description of what's new in this release, please see the release notes. For more documentation on this system, it is recommended that you purchase the 4.4BSD Document Set from O'Reilly Associates and the USENIX Association. ISBN 1-56592-082-1 We have no connection with O'Reilly, we're just satisfied customers! Have fun, and please let us know of any problems you encounter with this release! Comments should be sent to: hackers@FreeBSD.org Bug reports should be sent using the `send-pr' utility, if you were able to get the system installed, otherwise to: bugs@FreeBSD.org And general questions to: questions@FreeBSD.org Please have patience if your questions are not answered right away - this is an especially busy time for us, and our volunteer resources are often strained to the limit (if not somewhat past!). Thanks! The FreeBSD Project