mirror of https://github.com/ipxe/ipxe.git
[interface] Provide intf_insert() to insert a filter interface
Generalise the filter interface insertion logic from block_translate() and expose as intf_insert(), allowing a filter interface to be inserted on any existing interface. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/181/head
parent
cb0ba2f825
commit
09fe2bbd34
|
@ -242,9 +242,7 @@ int block_translate ( struct interface *block, userptr_t buffer, size_t size ) {
|
|||
}
|
||||
|
||||
/* Attach to interfaces, mortalise self, and return */
|
||||
assert ( block->dest != &null_intf );
|
||||
intf_plug_plug ( &blktrans->xfer, block->dest );
|
||||
intf_plug_plug ( &blktrans->block, block );
|
||||
intf_insert ( block, &blktrans->block, &blktrans->xfer );
|
||||
ref_put ( &blktrans->refcnt );
|
||||
|
||||
DBGC2 ( blktrans, "BLKTRANS %p created", blktrans );
|
||||
|
|
|
@ -390,6 +390,23 @@ void intfs_restart ( int rc, ... ) {
|
|||
va_end ( intfs );
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a filter interface
|
||||
*
|
||||
* @v intf Object interface
|
||||
* @v upper Upper end of filter
|
||||
* @v lower Lower end of filter
|
||||
*/
|
||||
void intf_insert ( struct interface *intf, struct interface *upper,
|
||||
struct interface *lower ) {
|
||||
struct interface *dest = intf->dest;
|
||||
|
||||
intf_get ( dest );
|
||||
intf_plug_plug ( intf, upper );
|
||||
intf_plug_plug ( lower, dest );
|
||||
intf_put ( dest );
|
||||
}
|
||||
|
||||
/**
|
||||
* Poke an object interface
|
||||
*
|
||||
|
|
|
@ -169,6 +169,8 @@ extern void intfs_shutdown ( int rc, ... ) __attribute__ (( sentinel ));
|
|||
extern void intf_restart ( struct interface *intf, int rc );
|
||||
extern void intfs_vrestart ( va_list intfs, int rc );
|
||||
extern void intfs_restart ( int rc, ... ) __attribute__ (( sentinel ));
|
||||
extern void intf_insert ( struct interface *intf, struct interface *upper,
|
||||
struct interface *lower );
|
||||
|
||||
extern void intf_poke ( struct interface *intf,
|
||||
void ( type ) ( struct interface *intf ) );
|
||||
|
|
Loading…
Reference in New Issue