| 248 | } |
| 249 | |
| 250 | static void * |
| 251 | pmd_init(struct pmd_params *params) |
| 252 | { |
| 253 | struct pmd_internals *p; |
| 254 | int status; |
| 255 | |
| 256 | p = rte_zmalloc_socket(params->name, |
| 257 | sizeof(struct pmd_internals), |
| 258 | 0, |
| 259 | params->cpu_id); |
| 260 | if (p == NULL) |
| 261 | return NULL; |
| 262 | |
| 263 | /* Params */ |
| 264 | memcpy(&p->params, params, sizeof(p->params)); |
| 265 | |
| 266 | /* Resources */ |
| 267 | softnic_mempool_init(p); |
| 268 | softnic_swq_init(p); |
| 269 | softnic_pipeline_init(p); |
| 270 | |
| 271 | status = softnic_thread_init(p); |
| 272 | if (status) { |
| 273 | rte_free(p); |
| 274 | return NULL; |
| 275 | } |
| 276 | |
| 277 | if (params->conn_port) { |
| 278 | struct softnic_conn_params conn_params; |
| 279 | |
| 280 | memcpy(&conn_params, &conn_params_default, sizeof(conn_params)); |
| 281 | conn_params.port = p->params.conn_port; |
| 282 | conn_params.msg_handle_arg = p; |
| 283 | |
| 284 | p->conn = softnic_conn_init(&conn_params); |
| 285 | if (p->conn == NULL) { |
| 286 | softnic_thread_free(p); |
| 287 | rte_free(p); |
| 288 | return NULL; |
| 289 | } |
| 290 | } |
| 291 | |
| 292 | return p; |
| 293 | } |
| 294 | |
| 295 | static struct rte_ether_addr eth_addr = { |
| 296 | .addr_bytes = {0}, |
no test coverage detected