2
0
mirror of https://github.com/xcat2/xNBA.git synced 2025-02-23 22:09:54 +00:00

[interface] Default to calling intf_restart() in response to intf_close()

If an object interface does not provide an intf_close() method, then
default to calling intf_restart().  This allows static objects to
safely ignore intf_close(), without needing to add code solely to
ensure that the interface gets unplugged.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2013-11-01 15:52:31 +00:00
parent 5c11ff6304
commit a3346e3587

View File

@ -34,8 +34,24 @@ FILE_LICENCE ( GPL2_OR_LATER );
*
*/
/**
* Close null interface
*
* @v intf Null interface
* @v rc Reason for close
*/
static void null_intf_close ( struct interface *intf __unused,
int rc __unused ) {
/* Do nothing. In particular, do not call intf_restart(),
* since that would result in an infinite loop.
*/
}
/** Null interface operations */
static struct interface_operation null_intf_op[] = {};
static struct interface_operation null_intf_op[] = {
INTF_OP ( intf_close, struct interface *, null_intf_close ),
};
/** Null interface descriptor */
struct interface_descriptor null_intf_desc =
@ -233,7 +249,8 @@ void intf_close ( struct interface *intf, int rc ) {
if ( op ) {
op ( object, rc );
} else {
/* Default is to ignore intf_close() */
/* Default is to restart the interface */
intf_restart ( dest, rc );
}
intf_put ( dest );