/* Maintained at www.Open-FCoE.org Provide interface to send ELS/CT FC frames fc_elsct_send() - Send an ELS or CT frame @lport: The local port to send the frame on @did: The destination ID for the frame @fp: The frame to be sent @op: The operational code @resp: The callback routine when the response is received  */
struct fc_seq* fc_elsct_send(struct fc_lport *lport, u32 did, struct fc_frame *fp, unsigned int op, void(*resp)(struct fc_seq *, struct fc_frame *, void *), void *arg, u32 timer_msec)
/* Maintained at www.Open-FCoE.org Provide interface to send ELS/CT FC frames fc_elsct_send() - Send an ELS or CT frame @lport: The local port to send the frame on @did: The destination ID for the frame @fp: The frame to be sent @op: The operational code @resp: The callback routine when the response is received  */
struct fc_seq* fc_elsct_send(struct fc_lport *lport, u32 did, struct fc_frame *fp, unsigned int op, void(*resp)(struct fc_seq *, struct fc_frame *, void *), void *arg, u32 timer_msec)
{
	enum fc_rctl r_ctl;
	enum fc_fh_type fh_type;
	int rc;
	if ((op >= ELS_LS_RJT) && (op <= ELS_AUTH_ELS))
		rc = fc_els_fill(lport, did, fp, op, &r_ctl, &fh_type);
	else {
		rc = fc_ct_fill(lport, did, fp, op, &r_ctl, &fh_type);
		did = FC_FID_DIR_SERV;
	}
	if (rc) {
		fc_frame_free(fp);
		return NULL;
	}
	fc_fill_fc_hdr(fp, r_ctl, did, fc_host_port_id(lport->host), fh_type,
		       FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
	return lport->tt.exch_seq_send(lport, fp, resp, NULL, arg, timer_msec);
}