96 if ( numeric->
rc == 0 )
109 numeric =
zalloc (
sizeof ( *numeric ) );
173 &mux->
sa ) ) != 0 ) {
174 DBGC ( mux,
"RESOLV %p could not use method %s: %s\n",
208 DBGC ( mux,
"RESOLV %p succeeded using method %s\n",
216 DBGC ( mux,
"RESOLV %p failed to resolve name\n", mux );
264 mux =
zalloc (
sizeof ( *mux ) + name_len );
275 DBGC ( mux,
"RESOLV %p attempting to resolve \"%s\"\n", mux,
name );
370 DBGC ( named,
"NAMED %p could not redirect: %s\n",
374 DBGC ( named,
"NAMED %p redirected successfully\n", named );
409 named =
zalloc (
sizeof ( *named ) );
421 DBGC ( named,
"NAMED %p opening \"%s\"\n",
static void named_resolv_done(struct named_socket *named, struct sockaddr *sa)
Name resolved.
An object interface operation.
struct arbelprm_rc_send_wqe rc
void intf_close(struct interface *intf, int rc)
Close an object interface.
#define INTF_INTF_FMT
printf() format string for INTF_INTF_DBG()
void intf_restart(struct interface *intf, int rc)
Shut down and restart an object interface.
struct interface xfer
Data transfer interface.
void intf_shutdown(struct interface *intf, int rc)
Shut down an object interface.
static struct interface_operation named_xfer_ops[]
Named socket opener data transfer interface operations.
static void resmux_close(struct resolv_mux *mux, int rc)
Close name resolution multiplexer.
struct resolver * resolver
Current child resolver.
struct interface_descriptor null_intf_desc
Null interface descriptor.
#define table_start(table)
Get start of linker table.
static struct interface_operation resmux_child_op[]
Name resolution multiplexer child interface operations.
int semantics
Communication semantics (e.g.
void resolv_done(struct interface *intf, struct sockaddr *sa)
Name resolved.
#define ref_init(refcnt, free)
Initialise a reference counter.
struct refcnt refcnt
Reference counter.
int have_local
Stored local socket address exists.
static size_t named_window(struct named_socket *named __unused)
Check flow control window.
#define INTF_INTF_DBG(intf, dest)
printf() arguments for representing an object interface pair
struct interface resolv
Name resolution interface.
static void process_init(struct process *process, struct process_descriptor *desc, struct refcnt *refcnt)
Initialise process and add to process list.
#define INTF_COL(intf)
Find debugging colourisation for an object interface.
int rc
Overall status code.
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
A name resolution multiplexer.
#define PROC_DESC_ONCE(object_type, process, _step)
Define a process descriptor for a process that runs only once.
struct refcnt refcnt
Reference counter.
int sock_aton(const char *string, struct sockaddr *sa)
Parse socket address.
struct sockaddr sa
Socket address to complete.
struct interface parent
Parent name resolution interface.
size_t xfer_window(struct interface *intf)
Check flow control window.
void * intf_object(struct interface *intf)
Get pointer to object containing object interface.
static int resmux_try(struct resolv_mux *mux)
Try current child name resolver.
Data transfer interfaces.
struct interface * intf
Original interface.
static struct interface_descriptor named_resolv_desc
Named socket opener resolver interface descriptor.
#define ENOMEM
Not enough space.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
char name[0]
Name to be resolved.
struct sockaddr local
Stored local socket address, if applicable.
#define __unused
Declare a variable or data structure as unused.
static int numeric_resolv(struct interface *resolv, const char *name, struct sockaddr *sa)
void intf_unplug(struct interface *intf)
Unplug an object interface.
Generalized socket address structure.
An object interface descriptor.
char * strerror(int errno)
Retrieve string representation of error number.
int(* resolv)(struct interface *resolv, const char *name, struct sockaddr *sa)
Start name resolution.
static void numeric_step(struct numeric_resolv *numeric)
void * zalloc(size_t size)
Allocate cleared memory.
static struct interface_operation resmux_parent_op[]
Name resolution multiplexer parent interface operations.
static struct interface_descriptor resmux_child_desc
Name resolution multiplexer child interface descriptor.
#define INTF_OP(op_type, object_type, op_func)
Define an object interface operation.
size_t strlen(const char *src)
Get length of string.
Data transfer interface opening.
struct process process
Process.
static struct interface_operation named_resolv_op[]
Named socket opener resolver interface operations.
static uint16_t struct vmbus_xfer_pages_operations * op
struct refcnt refcnt
Reference counter.
void intf_nullify(struct interface *intf)
Ignore all further operations on an object interface.
void intf_put(struct interface *intf)
Decrement reference count on an object interface.
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
static void resmux_child_close(struct resolv_mux *mux, int rc)
Child finished resolution.
const char * name
Name of this resolver (e.g.
struct interface resolv
Name resolution interface.
#define table_end(table)
Get end of linker table.
int resolv(struct interface *resolv, const char *name, struct sockaddr *sa)
Start name resolution.
#define INTF_DESC_PASSTHRU(object_type, intf, operations, passthru)
Define an object interface descriptor with pass-through interface.
static struct interface_descriptor resmux_parent_desc
Name resolution multiplexer parent interface descriptor.
struct resolver numeric_resolver __resolver(RESOLV_NUMERIC)
static struct process_descriptor numeric_process_desc
struct mschapv2_challenge peer
Peer challenge.
static struct interface_descriptor named_xfer_desc
Named socket opener data transfer interface descriptor.
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
struct interface child
Child name resolution interface.
static void named_close(struct named_socket *named, int rc)
Terminate named socket opener.
#define resolv_done_TYPE(object_type)
#define RESOLV_NUMERIC
Numeric resolver priority.
#define NULL
NULL pointer (VOID *)
#define intf_get_dest_op(intf, type, dest)
Get object interface destination and operation method.
#define RESOLVERS
Resolvers table.
int xfer_open_named_socket(struct interface *xfer, int semantics, struct sockaddr *peer, const char *name, struct sockaddr *local)
Open named socket.
#define ref_put(refcnt)
Drop reference to object.
struct sockaddr sa
Completed socket address.
int xfer_redirect(struct interface *intf, int type,...)
Send redirection event.