/* Most of the work here is just handed off to the libfc routine.  */
static struct fc_seq * fcoe_elsct_send(struct fc_lport *, u32 did, struct fc_frame *, unsigned int op, void(*resp)(struct fc_seq *, struct fc_frame *, void *), void *, u32 timeout)
/* Most of the work here is just handed off to the libfc routine.  */
static struct fc_seq * fcoe_elsct_send(struct fc_lport *, u32 did, struct fc_frame *, unsigned int op, void(*resp)(struct fc_seq *, struct fc_frame *, void *), void *, u32 timeout)
{
	struct fcoe_port *port = lport_priv(lport);
	struct fcoe_interface *fcoe = port->fcoe;
	struct fcoe_ctlr *fip = &fcoe->ctlr;
	struct fc_frame_header *fh = fc_frame_header_get(fp);
	switch (op) {
	case ELS_FLOGI:
	case ELS_FDISC:
		return fc_elsct_send(lport, did, fp, op, fcoe_flogi_resp,
				     fip, timeout);
	case ELS_LOGO:
		if (ntoh24(fh->fh_d_id) != FC_FID_FLOGI)
			break;
		return fc_elsct_send(lport, did, fp, op, fcoe_logo_resp,
				     lport, timeout);
	}
	return fc_elsct_send(lport, did, fp, op, resp, arg, timeout);
}