From fa869940dd9bb459ac599fe80c26c9d3e720fd31 Mon Sep 17 00:00:00 2001 From: Xavier Simonart Date: Mon, 20 Apr 2020 23:25:22 +0200 Subject: Add support for vdev tap devices This commit adds support for the creation of tap devices. To create a tap device, and associate it with a DPDK port, add within the port section: vdev= local ipv4= will appear as a kernel network device, with an IP ARP packets received from the network on the DPDK interface will be forwarded to the kernel. 1st packet which needs to be generated to a new IP will cause an IP packet to be sent to the kernel (using socket sendto) forcing the kernel to send an ARP_REQUEST. In this commit, there is no notification from the kernel about ARP table changes. This is subject to further commits. Two config files, gen_tap.cfg and swap_tap.cfg have been created. They work one against each other. *** Note however that they do not work if running within the same host (with the port being connected back to back) *** This is due to the fact that the kernel would bypass the ports and use local interface... Change-Id: Iadeec0d99e3c693472ea44bdb9163a3bf97df2fa Signed-off-by: Xavier Simonart --- VNFs/DPPD-PROX/handle_master.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'VNFs/DPPD-PROX/handle_master.h') diff --git a/VNFs/DPPD-PROX/handle_master.h b/VNFs/DPPD-PROX/handle_master.h index bc32182d..7772dd32 100644 --- a/VNFs/DPPD-PROX/handle_master.h +++ b/VNFs/DPPD-PROX/handle_master.h @@ -1,5 +1,5 @@ /* -// Copyright (c) 2010-2017 Intel Corporation +// Copyright (c) 2010-2020 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ enum arp_actions { ARP_REPLY_FROM_CTRL, ARP_TO_CTRL, REQ_MAC_TO_CTRL, + PKT_FROM_TAP, MAX_ACTIONS }; @@ -40,4 +41,9 @@ static inline void tx_drop(struct rte_mbuf *mbuf) rte_pktmbuf_free(mbuf); } +struct vdev { + int port_id; + struct rte_ring *ring; +}; void register_ip_to_ctrl_plane(struct task_base *task, uint32_t ip, uint8_t port_id, uint8_t core_id, uint8_t task_id); +void master_init_vdev(struct task_base *task, uint8_t port_id, uint8_t core_id, uint8_t task_id); -- cgit 1.2.3-korg