/* VA device multicast address add handler. */ static STATUS vxworks_va_mcast_addr_add(END_OBJ *end, char *addr) { VxWorksVa *va = (void *)end; SSH_DEBUG(SSH_D_MIDOK, ("mcast addr add on %s", va->name)); etherMultiAdd(&va->end.multiList, addr); return OK; }
LOCAL STATUS NetdrvMCastAdd(END_DEVICE *pDrvCtrl, /* device pointer */ char* pAddress /* new address to add */) { int error; if ((error = etherMultiAdd (&pDrvCtrl->end.multiList, pAddress)) == ENETRESET) { NetdrvConfig (pDrvCtrl); } return (OK); }
LOCAL STATUS mirrorEndMCastAddrAdd ( END_CTRL* pDrvCtrl, char* pAddr ) { STATUS error; error = etherMultiAdd(&pDrvCtrl->endObject.multiList, pAddr); if (error == ENETRESET) { pDrvCtrl->endObject.nMulti++; error = OK; } return (error == OK) ? OK : ERROR; }
STATUS socend_mcast_add(_END_OBJ_PAR *p, char *a) /* * Function: socend_mcast_add * Purpose: SENS interface to add a multicast address for the interface. * Parameters: p - pointer to VxWorks end_obj structure for device * a - pointer to address to add * Returns: OK/ERROR */ { struct end_object *eo = (struct end_object *)p; socend_t *se = (socend_t *)eo->devObject.pDevice; int ret; pbmp_t pbmp, ubmp; bcm_mcast_addr_t mcaddr; char mac_str[MACADDR_STR_LEN]; int unit = se->se_unit; if (LOG_CHECK(BSL_LS_SYS_END | BSL_INFO)) { format_macaddr(mac_str, (uint8 *)a); LOG_INFO(BSL_LS_SYS_END, (BSL_META_U(unit, "socend_mcast_add: %s%d %s\n"), eo->devObject.name, eo->devObject.unit, mac_str)); } /*soc_ioctl(ADD_MULTICAST)*/ if (ENETRESET == etherMultiAdd(&eo->multiList, a)) { BCM_PBMP_CLEAR(pbmp); BCM_PBMP_PORT_ADD(pbmp, CMIC_PORT(unit)); #if 0 BCM_PBMP_PORT_ADD(pbmp, eo->devObject.unit); #endif BCM_PBMP_ASSIGN(ubmp, pbmp); bcm_mcast_addr_t_init(&mcaddr, (uint8 *)a, se->se_vlan); mcaddr.cos_dst = 0; BCM_PBMP_ASSIGN(mcaddr.pbmp, pbmp); BCM_PBMP_ASSIGN(mcaddr.ubmp, ubmp); ret = bcm_mcast_addr_add(se->se_unit, &mcaddr); if (ret >= BCM_E_NONE) { #if 0 ret = bcm_amux_register(se->se_unit, a, se->se_vlan, socend_receive, (void *)se); #endif if (ret < 0) { LOG_CLI((BSL_META_U(unit, "socend_mcast_add: %s%d bcm_amux_register failed: %s\n"), eo->devObject.name, eo->devObject.unit, bcm_errmsg(ret))); bcm_mcast_addr_remove(se->se_unit, (uint8 *)a, se->se_vlan); } return (OK); } else { LOG_CLI((BSL_META_U(unit, "bcm_mcast_addr_add failed ERROR : %s\n"), bcm_errmsg(ret))); LOG_INFO(BSL_LS_SYS_END, (BSL_META_U(unit, "socend_mcast_add: Unit %d Device %s%d " "Software RESET\n"), se->se_unit, eo->devObject.name, eo->devObject.unit)); return (ERROR); } } return(ERROR); }