| 154 | } |
| 155 | |
| 156 | __checkReturn efx_rc_t |
| 157 | efx_mac_addr_set( |
| 158 | __in efx_nic_t *enp, |
| 159 | __in uint8_t *addr) |
| 160 | { |
| 161 | efx_port_t *epp = &(enp->en_port); |
| 162 | const efx_mac_ops_t *emop = epp->ep_emop; |
| 163 | uint8_t old_addr[6]; |
| 164 | uint32_t oui; |
| 165 | efx_rc_t rc; |
| 166 | |
| 167 | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); |
| 168 | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PORT); |
| 169 | |
| 170 | if (EFX_MAC_ADDR_IS_MULTICAST(addr)) { |
| 171 | rc = EINVAL; |
| 172 | goto fail1; |
| 173 | } |
| 174 | |
| 175 | oui = addr[0] << 16 | addr[1] << 8 | addr[2]; |
| 176 | if (oui == 0x000000) { |
| 177 | rc = EINVAL; |
| 178 | goto fail2; |
| 179 | } |
| 180 | |
| 181 | EFX_MAC_ADDR_COPY(old_addr, epp->ep_mac_addr); |
| 182 | EFX_MAC_ADDR_COPY(epp->ep_mac_addr, addr); |
| 183 | if ((rc = emop->emo_addr_set(enp)) != 0) |
| 184 | goto fail3; |
| 185 | |
| 186 | return (0); |
| 187 | |
| 188 | fail3: |
| 189 | EFSYS_PROBE(fail3); |
| 190 | |
| 191 | EFX_MAC_ADDR_COPY(epp->ep_mac_addr, old_addr); |
| 192 | |
| 193 | fail2: |
| 194 | EFSYS_PROBE(fail2); |
| 195 | fail1: |
| 196 | EFSYS_PROBE1(fail1, efx_rc_t, rc); |
| 197 | |
| 198 | return (rc); |
| 199 | } |
| 200 | |
| 201 | __checkReturn efx_rc_t |
| 202 | efx_mac_filter_set( |
no outgoing calls
no test coverage detected