Support for PCAP MAC address using physical interface MAC.
Support for getting proper link status, speed and duplex.

Signed-off-by: Juhamatti Kuusisaari <juhamatti.kuusisa...@coriant.com>
---
 v2:
 * Fix whitespace
---
 drivers/net/pcap/rte_eth_pcap.c | 39 ++++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c
index d2aba1c..4d6db55 100644
--- a/drivers/net/pcap/rte_eth_pcap.c
+++ b/drivers/net/pcap/rte_eth_pcap.c
@@ -619,18 +619,22 @@ eth_link_update(struct rte_eth_dev *dev __rte_unused,
        struct pmd_internals *internals = dev->data->dev_private;
 
        if (internals->if_name && (internals->if_fd != -1)) {
-               /* Get link status, speed and duplex from the underlying 
interface */
-               strncpy(ifr.ifr_name, internals->if_name, 
sizeof(ifr.ifr_name)-1);
-               ifr.ifr_name[sizeof(ifr.ifr_name)-1] = 0;
+               /* Get link status, speed and duplex of the interface. */
+               strncpy(ifr.ifr_name, internals->if_name,
+                               sizeof(ifr.ifr_name) - 1);
+               ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = 0;
                if (!ioctl(internals->if_fd, SIOCGIFFLAGS, &ifr))
-                       dev->data->dev_link.link_status = (ifr.ifr_flags & 
IFF_UP) ? 1 : 0;
+                       dev->data->dev_link.link_status =
+                               (ifr.ifr_flags & IFF_UP) ? 1 : 0;
 
                cmd.cmd = ETHTOOL_GSET;
                ifr.ifr_data = (void *)&cmd;
                if (!ioctl(internals->if_fd, SIOCETHTOOL, &ifr)) {
-                       dev->data->dev_link.link_speed = 
ethtool_cmd_speed(&cmd);
+                       dev->data->dev_link.link_speed =
+                               ethtool_cmd_speed(&cmd);
                        dev->data->dev_link.link_duplex =
-                               cmd.duplex ? ETH_LINK_FULL_DUPLEX : 
ETH_LINK_HALF_DUPLEX;
+                               cmd.duplex ?
+                               ETH_LINK_FULL_DUPLEX : ETH_LINK_HALF_DUPLEX;
                }
        }
 #endif /* RTE_LIBRTE_PMD_PCAP_IF_MAC_SUPPORT */
@@ -896,21 +900,30 @@ eth_from_pcaps_common(struct rte_vdev_device *vdev,
                        break;
        }
 
-       if (pair == NULL)
+       if (pair == NULL) {
                (*internals)->if_index = 0;
-       else {
+       } else {
                (*internals)->if_index = if_nametoindex(pair->value);
 #ifdef RTE_LIBRTE_PMD_PCAP_IF_MAC_SUPPORT
-               /* Use real interface mac addr, save name and fd for 
eth_link_update() */
+               /*
+                * Use real interface mac addr, save name and
+                * file descriptor for the update.
+                */
                (*internals)->if_name = strdup(pair->value);
                (*internals)->if_fd = socket(AF_INET, SOCK_DGRAM, 0);
                if ((*internals)->if_fd != -1) {
                        struct ifreq ifr;
-                       strncpy(ifr.ifr_name, pair->value, 
sizeof(ifr.ifr_name)-1);
-                       ifr.ifr_name[sizeof(ifr.ifr_name)-1] = 0;
+                       strncpy(ifr.ifr_name, pair->value,
+                                       sizeof(ifr.ifr_name) - 1);
+                       ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = 0;
                        if (!ioctl((*internals)->if_fd, SIOCGIFHWADDR, &ifr)) {
-                               (*eth_dev)->data->mac_addrs = 
rte_zmalloc_socket(NULL, ETHER_ADDR_LEN, 0, vdev->device.numa_node);
-                               rte_memcpy((*eth_dev)->data->mac_addrs, 
ifr.ifr_addr.sa_data, ETHER_ADDR_LEN);
+                               (*eth_dev)->data->mac_addrs =
+                                       rte_zmalloc_socket(NULL,
+                                                       ETHER_ADDR_LEN, 0,
+                                                       vdev->device.numa_node);
+                               rte_memcpy((*eth_dev)->data->mac_addrs,
+                                               ifr.ifr_addr.sa_data,
+                                               ETHER_ADDR_LEN);
                        }
                }
 #endif /* RTE_LIBRTE_PMD_PCAP_IF_MAC_SUPPORT */
-- 
2.8.1

Reply via email to