114 if (
iob_len ( iobuf ) <
sizeof ( resp->
ct ) ) {
115 DBGC ( query,
"FCNS %p received underlength response (%zd " 116 "bytes)\n", query,
iob_len ( iobuf ) );
125 DBGC ( query,
"FCNS %p received underlength accept " 126 "response (%zd bytes)\n",
132 DBGC ( query,
"FCNS %p resolved %s to %s via %s\n",
136 peer_port_id ) ) != 0 )
140 DBGC ( query,
"FCNS %p rejected (reason %02x explanation " 145 DBGC ( query,
"FCNS %p received invalid response code %04x\n",
174 DBGC ( query,
"FCNS %p could not create exchange: %s\n",
181 memset ( &gid_pn, 0,
sizeof ( gid_pn ) );
193 sizeof ( gid_pn ), &
meta ) ) != 0){
194 DBGC ( query,
"FCNS %p could not deliver query: %s\n",
228 query =
zalloc (
sizeof ( *query ) );
239 DBGC ( query,
"FCNS %p querying %s via %s\n",
struct fc_ct_header ct
Common Transport header.
#define EINVAL
Invalid argument.
An object interface operation.
char name[8]
Name of this port.
struct arbelprm_rc_send_wqe rc
void intf_close(struct interface *intf, int rc)
Close an object interface.
void intf_shutdown(struct interface *intf, int rc)
Shut down an object interface.
int fc_xchg_originate(struct interface *parent, struct fc_port *port, struct fc_port_id *peer_port_id, unsigned int type)
Originate a new Fibre Channel exchange.
static void fc_ns_query_free(struct refcnt *refcnt)
Free name server query.
struct interface xchg
Fibre Channel exchange.
int xfer_deliver_raw_meta(struct interface *intf, const void *data, size_t len, struct xfer_metadata *meta)
Deliver datagram as raw data.
A Fibre Channel name server query.
const char * fc_id_ntoa(const struct fc_port_id *id)
Format Fibre Channel port ID.
#define ref_init(refcnt, free)
Initialise a reference counter.
static void fc_ns_query_close(struct fc_ns_query *query, int rc)
Close name server query.
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
A Fibre Channel name server GID_PN request.
static void process_init(struct process *process, struct process_descriptor *desc, struct refcnt *refcnt)
Initialise process and add to process list.
static void fc_port_put(struct fc_port *port)
Drop reference to Fibre Channel port.
static int fc_ns_query_deliver(struct fc_ns_query *query, struct io_buffer *iobuf, struct xfer_metadata *meta __unused)
Receive name server query response.
const char * fc_ntoa(const struct fc_name *wwn)
Format Fibre Channel WWN.
#define PROC_DESC_ONCE(object_type, process, _step)
Define a process descriptor for a process that runs only once.
static struct process_descriptor fc_ns_query_process_desc
Name server process descriptor.
void process_del(struct process *process)
Remove process from process list.
struct refcnt refcnt
Reference count.
#define ENOTSUP
Operation not supported.
Data transfer interfaces.
struct fc_ct_header ct
Common Transport header.
#define ENOMEM
Not enough space.
struct fc_ns_gid_pn_response gid_pn
Get ID by port name.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
Fibre Channel name server lookups.
struct fc_ns_reject_response reject
Rejection.
#define container_of(ptr, type, field)
Get containing structure.
A Fibre Channel port identifier.
#define __unused
Declare a variable or data structure as unused.
#define FC_CT_REVISION
Fibre Channel Common Transport revision.
int(* done)(struct fc_peer *peer, struct fc_port *port, struct fc_port_id *peer_port_id)
Success handler.
struct fc_port_id port_id
Port ID.
An object interface descriptor.
char * strerror(int errno)
Retrieve string representation of error number.
static void(* free)(struct refcnt *refcnt))
static void fc_peer_put(struct fc_peer *peer)
Drop reference to Fibre Channel peer.
void * zalloc(size_t size)
Allocate cleared memory.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
#define INTF_OP(op_type, object_type, op_func)
Define an object interface operation.
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
struct fc_name port_wwn
Port name.
struct process process
Process.
static struct fc_peer * fc_peer_get(struct fc_peer *peer)
Get reference to Fibre Channel peer.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
struct fc_name port_wwn
Port name.
static struct fc_port * fc_port_get(struct fc_port *port)
Get reference to Fibre Channel port.
struct fc_ct_header ct
Common Transport header.
#define INTF_DESC(object_type, intf, operations)
Define an object interface descriptor.
void * data
Start of data.
struct fc_ns_port_id port_id
Port ID.
static struct interface_descriptor fc_ns_query_xchg_desc
Name server exchange interface descriptor.
int fc_ns_query(struct fc_peer *peer, struct fc_port *port, int(*done)(struct fc_peer *peer, struct fc_port *port, struct fc_port_id *peer_port_id))
Issue Fibre Channel name server query.
A Fibre Channel name server response.
static void fc_ns_query_step(struct fc_ns_query *query)
Name server query process.
#define XFER_FL_OVER
Sender is relinquishing use of half-duplex channel.
struct mschapv2_challenge peer
Peer challenge.
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
struct fc_port_id fc_gs_port_id
Generic services port ID.
static struct interface_operation fc_ns_query_xchg_op[]
Name server exchange interface operations.
struct fc_peer * peer
Fibre Channel peer.
struct bofm_section_header done
struct fc_port * port
Fibre Channel port.
#define ref_put(refcnt)
Drop reference to object.
void * memset(void *dest, int character, size_t len) __nonnull