diff options
Diffstat (limited to 'roms/ipxe/src/include/ipxe/resolv.h')
-rw-r--r-- | roms/ipxe/src/include/ipxe/resolv.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/roms/ipxe/src/include/ipxe/resolv.h b/roms/ipxe/src/include/ipxe/resolv.h new file mode 100644 index 00000000..d9868a5d --- /dev/null +++ b/roms/ipxe/src/include/ipxe/resolv.h @@ -0,0 +1,51 @@ +#ifndef _IPXE_RESOLV_H +#define _IPXE_RESOLV_H + +/** @file + * + * Name resolution + * + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/interface.h> +#include <ipxe/tables.h> + +struct sockaddr; + +/** A name resolver */ +struct resolver { + /** Name of this resolver (e.g. "DNS") */ + const char *name; + /** Start name resolution + * + * @v resolv Name resolution interface + * @v name Name to resolve + * @v sa Socket address to complete + * @ret rc Return status code + */ + int ( * resolv ) ( struct interface *resolv, const char *name, + struct sockaddr *sa ); +}; + +/** Numeric resolver priority */ +#define RESOLV_NUMERIC 01 + +/** Normal resolver priority */ +#define RESOLV_NORMAL 02 + +/** Resolvers table */ +#define RESOLVERS __table ( struct resolver, "resolvers" ) + +/** Register as a name resolver */ +#define __resolver( resolv_order ) __table_entry ( RESOLVERS, resolv_order ) + +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 interface *resolv, const char *name, + struct sockaddr *sa ); + +#endif /* _IPXE_RESOLV_H */ |