struct ls_rjt stat;
uint32_t *payload;
uint32_t cmd, did, newnode;
+ uint32_t vid, flag;
uint8_t rjt_exp, rjt_err = 0, init_link = 0;
IOCB_t *icmd = &elsiocb->iocb;
+ struct serv_parm *sp;
LPFC_MBOXQ_t *mbox;
if (!vport || !(elsiocb->context2))
did, vport->port_state, ndlp->nlp_flag);
phba->fc_stat.elsRcvFLOGI++;
+ sp = (struct serv_parm *)
+ ((uint8_t *)payload + sizeof(uint32_t));
+
+ /* Check to see if this is firmware generated */
+ if (sp->cmn.valid_vendor_ver_level) {
+ vid = be32_to_cpu(sp->un.vv.vid);
+ flag = be32_to_cpu(sp->un.vv.flags);
+ if (vid == LPFC_VV_BRCD_ID) {
+ /* Drop this FLOGI */
+ lpfc_printf_vlog(
+ vport, KERN_INFO, LOG_ELS,
+ "3316 Dropping rcv FLOGI: "
+ "flag x%x\n", flag);
+ goto lsrjt;
+ }
+ }
/* If the driver believes fabric discovery is done and is ready,
* bounce the link. There is some descrepancy.
* link and start over.
*/
if (init_link) {
+ lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
+ "3318 Resetting Link, multiple rcv FLOGIs\n");
mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
if (!mbox)
return;