| 7337 | } |
| 7338 | |
| 7339 | int |
| 7340 | i40e_vsi_add_vlan(struct i40e_vsi *vsi, uint16_t vlan) |
| 7341 | { |
| 7342 | struct i40e_macvlan_filter *mv_f; |
| 7343 | int mac_num; |
| 7344 | int ret = I40E_SUCCESS; |
| 7345 | |
| 7346 | if (!vsi || vlan > RTE_ETHER_MAX_VLAN_ID) |
| 7347 | return I40E_ERR_PARAM; |
| 7348 | |
| 7349 | /* If it's already set, just return */ |
| 7350 | if (i40e_find_vlan_filter(vsi,vlan)) |
| 7351 | return I40E_SUCCESS; |
| 7352 | |
| 7353 | mac_num = vsi->mac_num; |
| 7354 | |
| 7355 | if (mac_num == 0) { |
| 7356 | PMD_DRV_LOG(ERR, "Error! VSI doesn't have a mac addr"); |
| 7357 | return I40E_ERR_PARAM; |
| 7358 | } |
| 7359 | |
| 7360 | mv_f = rte_zmalloc("macvlan_data", mac_num * sizeof(*mv_f), 0); |
| 7361 | |
| 7362 | if (mv_f == NULL) { |
| 7363 | PMD_DRV_LOG(ERR, "failed to allocate memory"); |
| 7364 | return I40E_ERR_NO_MEMORY; |
| 7365 | } |
| 7366 | |
| 7367 | ret = i40e_find_all_mac_for_vlan(vsi, mv_f, mac_num, vlan); |
| 7368 | |
| 7369 | if (ret != I40E_SUCCESS) |
| 7370 | goto DONE; |
| 7371 | |
| 7372 | ret = i40e_add_macvlan_filters(vsi, mv_f, mac_num); |
| 7373 | |
| 7374 | if (ret != I40E_SUCCESS) |
| 7375 | goto DONE; |
| 7376 | |
| 7377 | i40e_set_vlan_filter(vsi, vlan, 1); |
| 7378 | |
| 7379 | vsi->vlan_num++; |
| 7380 | ret = I40E_SUCCESS; |
| 7381 | DONE: |
| 7382 | rte_free(mv_f); |
| 7383 | return ret; |
| 7384 | } |
| 7385 | |
| 7386 | int |
| 7387 | i40e_vsi_delete_vlan(struct i40e_vsi *vsi, uint16_t vlan) |
no test coverage detected