| 6682 | } |
| 6683 | |
| 6684 | int |
| 6685 | rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features) |
| 6686 | { |
| 6687 | struct rte_eth_dev *dev; |
| 6688 | int ret; |
| 6689 | |
| 6690 | RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); |
| 6691 | dev = &rte_eth_devices[port_id]; |
| 6692 | |
| 6693 | if (dev->data->dev_configured != 0) { |
| 6694 | RTE_ETHDEV_LOG(ERR, |
| 6695 | "The port (ID=%"PRIu16") is already configured\n", |
| 6696 | port_id); |
| 6697 | return -EBUSY; |
| 6698 | } |
| 6699 | |
| 6700 | if (features == NULL) { |
| 6701 | RTE_ETHDEV_LOG(ERR, "Invalid features (NULL)\n"); |
| 6702 | return -EINVAL; |
| 6703 | } |
| 6704 | |
| 6705 | if ((*features & RTE_ETH_RX_METADATA_TUNNEL_ID) != 0 && |
| 6706 | rte_flow_restore_info_dynflag_register() < 0) |
| 6707 | *features &= ~RTE_ETH_RX_METADATA_TUNNEL_ID; |
| 6708 | |
| 6709 | if (*dev->dev_ops->rx_metadata_negotiate == NULL) |
| 6710 | return -ENOTSUP; |
| 6711 | ret = eth_err(port_id, |
| 6712 | (*dev->dev_ops->rx_metadata_negotiate)(dev, features)); |
| 6713 | |
| 6714 | rte_eth_trace_rx_metadata_negotiate(port_id, *features, ret); |
| 6715 | |
| 6716 | return ret; |
| 6717 | } |
| 6718 | |
| 6719 | int |
| 6720 | rte_eth_ip_reassembly_capability_get(uint16_t port_id, |