diff options
author | Michael Brown <mcb30@ipxe.org> | 2008-06-13 03:36:24 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2010-06-22 15:45:57 +0100 |
commit | 7b4fbd93a5f45355e4e5d30e5d34c310f6d30c05 (patch) | |
tree | 79280f7a632c413e51b588f462c512fb5c8ae898 /src/include/ipxe/resolv.h | |
parent | a03dd97e6b4c6d1d30ac9dc7e63f87402434d9bc (diff) | |
download | ipxe-7b4fbd93a5f45355e4e5d30e5d34c310f6d30c05.tar.gz |
[interface] Convert all name-resolution interfaces to generic interfaces
Remove name-resolution as an interface type, and replace
name-resolution interfaces with generic interfaces supporting the
resolv_done() method.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/resolv.h')
-rw-r--r-- | src/include/ipxe/resolv.h | 131 |
1 files changed, 6 insertions, 125 deletions
diff --git a/src/include/ipxe/resolv.h b/src/include/ipxe/resolv.h index 767614bd2..d9868a5d7 100644 --- a/src/include/ipxe/resolv.h +++ b/src/include/ipxe/resolv.h @@ -9,126 +9,10 @@ FILE_LICENCE ( GPL2_OR_LATER ); -#include <ipxe/refcnt.h> #include <ipxe/interface.h> #include <ipxe/tables.h> -#include <ipxe/socket.h> -struct resolv_interface; - -/** Name resolution interface operations */ -struct resolv_interface_operations { - /** Name resolution completed - * - * @v resolv Name resolution interface - * @v sa Completed socket address (if successful) - * @v rc Final status code - */ - void ( * done ) ( struct resolv_interface *resolv, - struct sockaddr *sa, int rc ); -}; - -/** A name resolution interface */ -struct resolv_interface { - /** Generic object communication interface */ - struct interface intf; - /** Operations for received messages */ - struct resolv_interface_operations *op; -}; - -extern struct resolv_interface null_resolv; -extern struct resolv_interface_operations null_resolv_ops; - -/** - * Initialise a name resolution interface - * - * @v resolv Name resolution interface - * @v op Name resolution interface operations - * @v refcnt Containing object reference counter, or NULL - */ -static inline void resolv_init ( struct resolv_interface *resolv, - struct resolv_interface_operations *op, - struct refcnt *refcnt ) { - resolv->intf.dest = &null_resolv.intf; - resolv->intf.refcnt = refcnt; - resolv->op = op; -} - -/** - * Get name resolution interface from generic object communication interface - * - * @v intf Generic object communication interface - * @ret resolv Name resolution interface - */ -static inline __attribute__ (( always_inline )) struct resolv_interface * -intf_to_resolv ( struct interface *intf ) { - return container_of ( intf, struct resolv_interface, intf ); -} - -/** - * Get reference to destination name resolution interface - * - * @v resolv Name resolution interface - * @ret dest Destination interface - */ -static inline __attribute__ (( always_inline )) struct resolv_interface * -resolv_get_dest ( struct resolv_interface *resolv ) { - return intf_to_resolv ( intf_get ( resolv->intf.dest ) ); -} - -/** - * Drop reference to name resolution interface - * - * @v resolv name resolution interface - */ -static inline __attribute__ (( always_inline )) void -resolv_put ( struct resolv_interface *resolv ) { - intf_put ( &resolv->intf ); -} - -/** - * Plug a name resolution interface into a new destination interface - * - * @v resolv Name resolution interface - * @v dest New destination interface - */ -static inline __attribute__ (( always_inline )) void -resolv_plug ( struct resolv_interface *resolv, struct resolv_interface *dest ) { - intf_plug ( &resolv->intf, &dest->intf ); -} - -/** - * Plug two name resolution interfaces together - * - * @v a Name resolution interface A - * @v b Name resolution interface B - */ -static inline __attribute__ (( always_inline )) void -resolv_plug_plug ( struct resolv_interface *a, struct resolv_interface *b ) { - intf_plug_plug ( &a->intf, &b->intf ); -} - -/** - * Unplug a name resolution interface - * - * @v resolv Name resolution interface - */ -static inline __attribute__ (( always_inline )) void -resolv_unplug ( struct resolv_interface *resolv ) { - intf_plug ( &resolv->intf, &null_resolv.intf ); -} - -/** - * Stop using a name resolution interface - * - * @v resolv Name resolution interface - * - * After calling this method, no further messages will be received via - * the interface. - */ -static inline void resolv_nullify ( struct resolv_interface *resolv ) { - resolv->op = &null_resolv_ops; -}; +struct sockaddr; /** A name resolver */ struct resolver { @@ -141,7 +25,7 @@ struct resolver { * @v sa Socket address to complete * @ret rc Return status code */ - int ( * resolv ) ( struct resolv_interface *resolv, const char *name, + int ( * resolv ) ( struct interface *resolv, const char *name, struct sockaddr *sa ); }; @@ -157,14 +41,11 @@ struct resolver { /** Register as a name resolver */ #define __resolver( resolv_order ) __table_entry ( RESOLVERS, resolv_order ) -extern void resolv_done ( struct resolv_interface *resolv, - struct sockaddr *sa, int rc ); -extern void ignore_resolv_done ( struct resolv_interface *resolv, - struct sockaddr *sa, int rc ); -extern struct resolv_interface_operations null_resolv_ops; -extern struct resolv_interface null_resolv; +extern void resolv_done ( struct interface *intf, struct sockaddr *sa ); +#define resolv_done_TYPE( object_type ) \ + typeof ( void ( object_type, struct sockaddr *sa ) ) -extern int resolv ( struct resolv_interface *resolv, const char *name, +extern int resolv ( struct interface *resolv, const char *name, struct sockaddr *sa ); #endif /* _IPXE_RESOLV_H */ |