| 1890 | |
| 1891 | |
| 1892 | static struct rte_flow * |
| 1893 | bnxt_flow_create(struct rte_eth_dev *dev, |
| 1894 | const struct rte_flow_attr *attr, |
| 1895 | const struct rte_flow_item pattern[], |
| 1896 | const struct rte_flow_action actions[], |
| 1897 | struct rte_flow_error *error) |
| 1898 | { |
| 1899 | struct bnxt *bp = dev->data->dev_private; |
| 1900 | struct bnxt_vnic_info *vnic = NULL; |
| 1901 | struct bnxt_filter_info *filter; |
| 1902 | bool update_flow = false; |
| 1903 | struct rte_flow *flow; |
| 1904 | int ret = 0; |
| 1905 | uint32_t tun_type, flow_id; |
| 1906 | |
| 1907 | if (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp)) { |
| 1908 | rte_flow_error_set(error, EINVAL, |
| 1909 | RTE_FLOW_ERROR_TYPE_HANDLE, NULL, |
| 1910 | "Failed to create flow, Not a Trusted VF!"); |
| 1911 | return NULL; |
| 1912 | } |
| 1913 | |
| 1914 | if (!dev->data->dev_started) { |
| 1915 | rte_flow_error_set(error, |
| 1916 | EINVAL, |
| 1917 | RTE_FLOW_ERROR_TYPE_UNSPECIFIED, |
| 1918 | NULL, |
| 1919 | "Device must be started"); |
| 1920 | return NULL; |
| 1921 | } |
| 1922 | |
| 1923 | flow = rte_zmalloc("bnxt_flow", sizeof(struct rte_flow), 0); |
| 1924 | if (!flow) { |
| 1925 | rte_flow_error_set(error, ENOMEM, |
| 1926 | RTE_FLOW_ERROR_TYPE_HANDLE, NULL, |
| 1927 | "Failed to allocate memory"); |
| 1928 | return flow; |
| 1929 | } |
| 1930 | |
| 1931 | bnxt_acquire_flow_lock(bp); |
| 1932 | ret = bnxt_flow_args_validate(attr, pattern, actions, error); |
| 1933 | if (ret != 0) { |
| 1934 | PMD_DRV_LOG(ERR, "Not a validate flow.\n"); |
| 1935 | goto free_flow; |
| 1936 | } |
| 1937 | |
| 1938 | filter = bnxt_get_unused_filter(bp); |
| 1939 | if (filter == NULL) { |
| 1940 | rte_flow_error_set(error, ENOSPC, |
| 1941 | RTE_FLOW_ERROR_TYPE_HANDLE, NULL, |
| 1942 | "Not enough resources for a new flow"); |
| 1943 | goto free_flow; |
| 1944 | } |
| 1945 | |
| 1946 | ret = bnxt_validate_and_parse_flow(dev, pattern, actions, attr, |
| 1947 | error, filter); |
| 1948 | if (ret != 0) |
| 1949 | goto free_filter; |
nothing calls this directly
no test coverage detected