| 187 | } |
| 188 | |
| 189 | static int |
| 190 | kernel_rx_node_init(const struct rte_graph *graph, struct rte_node *node) |
| 191 | { |
| 192 | struct kernel_rx_node_main *rx_node_main = kernel_rx_node_data_get(); |
| 193 | kernel_rx_node_ctx_t *ctx = (kernel_rx_node_ctx_t *)node->ctx; |
| 194 | kernel_rx_node_elem_t *elem = rx_node_main->head; |
| 195 | kernel_rx_info_t *recv_info; |
| 196 | int sock; |
| 197 | |
| 198 | while (elem) { |
| 199 | if (elem->nid == node->id) { |
| 200 | /* Update node specific context */ |
| 201 | memcpy(ctx, &elem->ctx, sizeof(kernel_rx_node_ctx_t)); |
| 202 | break; |
| 203 | } |
| 204 | elem = elem->next; |
| 205 | } |
| 206 | |
| 207 | RTE_VERIFY(elem != NULL); |
| 208 | |
| 209 | if (ctx->pktmbuf_pool == NULL) { |
| 210 | node_err("kernel_rx", "Invalid mbuf pool on graph %s", graph->name); |
| 211 | return -EINVAL; |
| 212 | } |
| 213 | |
| 214 | recv_info = rte_zmalloc_socket("kernel_rx_info", sizeof(kernel_rx_info_t), |
| 215 | RTE_CACHE_LINE_SIZE, graph->socket); |
| 216 | if (!recv_info) { |
| 217 | node_err("kernel_rx", "Kernel recv_info is NULL"); |
| 218 | return -ENOMEM; |
| 219 | } |
| 220 | |
| 221 | sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); |
| 222 | if (sock < 0) { |
| 223 | node_err("kernel_rx", "Unable to open RAW socket"); |
| 224 | return sock; |
| 225 | } |
| 226 | |
| 227 | recv_info->sock = sock; |
| 228 | ctx->recv_info = recv_info; |
| 229 | |
| 230 | return 0; |
| 231 | } |
| 232 | |
| 233 | static void |
| 234 | kernel_rx_node_fini(const struct rte_graph *graph __rte_unused, struct rte_node *node) |
nothing calls this directly
no test coverage detected