ethdev: change device info get callback to return int
[dpdk.git] / drivers / net / tap / rte_eth_tap.c
index 47a2b68..f85458c 100644 (file)
@@ -71,8 +71,6 @@
 #define TAP_IOV_DEFAULT_MAX 1024
 
 static int tap_devices_count;
-static struct rte_vdev_driver pmd_tap_drv;
-static struct rte_vdev_driver pmd_tun_drv;
 
 static const char *valid_arguments[] = {
        ETH_TAP_IFACE_ARG,
@@ -261,7 +259,7 @@ tap_verify_csum(struct rte_mbuf *mbuf)
        uint32_t l2 = mbuf->packet_type & RTE_PTYPE_L2_MASK;
        uint32_t l3 = mbuf->packet_type & RTE_PTYPE_L3_MASK;
        uint32_t l4 = mbuf->packet_type & RTE_PTYPE_L4_MASK;
-       unsigned int l2_len = sizeof(struct ether_hdr);
+       unsigned int l2_len = sizeof(struct rte_ether_hdr);
        unsigned int l3_len;
        uint16_t cksum = 0;
        void *l3_hdr;
@@ -272,12 +270,12 @@ tap_verify_csum(struct rte_mbuf *mbuf)
        else if (l2 == RTE_PTYPE_L2_ETHER_QINQ)
                l2_len += 8;
        /* Don't verify checksum for packets with discontinuous L2 header */
-       if (unlikely(l2_len + sizeof(struct ipv4_hdr) >
+       if (unlikely(l2_len + sizeof(struct rte_ipv4_hdr) >
                     rte_pktmbuf_data_len(mbuf)))
                return;
        l3_hdr = rte_pktmbuf_mtod_offset(mbuf, void *, l2_len);
        if (l3 == RTE_PTYPE_L3_IPV4 || l3 == RTE_PTYPE_L3_IPV4_EXT) {
-               struct ipv4_hdr *iph = l3_hdr;
+               struct rte_ipv4_hdr *iph = l3_hdr;
 
                /* ihl contains the number of 4-byte words in the header */
                l3_len = 4 * (iph->version_ihl & 0xf);
@@ -295,9 +293,9 @@ tap_verify_csum(struct rte_mbuf *mbuf)
                        PKT_RX_IP_CKSUM_BAD :
                        PKT_RX_IP_CKSUM_GOOD;
        } else if (l3 == RTE_PTYPE_L3_IPV6) {
-               struct ipv6_hdr *iph = l3_hdr;
+               struct rte_ipv6_hdr *iph = l3_hdr;
 
-               l3_len = sizeof(struct ipv6_hdr);
+               l3_len = sizeof(struct rte_ipv6_hdr);
                /* check that the total length reported by header is not
                 * greater than the total received size
                 */
@@ -496,7 +494,7 @@ tap_tx_l3_cksum(char *packet, uint64_t ol_flags, unsigned int l2_len,
        void *l3_hdr = packet + l2_len;
 
        if (ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4)) {
-               struct ipv4_hdr *iph = l3_hdr;
+               struct rte_ipv4_hdr *iph = l3_hdr;
                uint16_t cksum;
 
                iph->hdr_checksum = 0;
@@ -508,9 +506,9 @@ tap_tx_l3_cksum(char *packet, uint64_t ol_flags, unsigned int l2_len,
 
                l4_hdr = packet + l2_len + l3_len;
                if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM)
-                       *l4_cksum = &((struct udp_hdr *)l4_hdr)->dgram_cksum;
+                       *l4_cksum = &((struct rte_udp_hdr *)l4_hdr)->dgram_cksum;
                else if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM)
-                       *l4_cksum = &((struct tcp_hdr *)l4_hdr)->cksum;
+                       *l4_cksum = &((struct rte_tcp_hdr *)l4_hdr)->cksum;
                else
                        return;
                **l4_cksum = 0;
@@ -565,9 +563,9 @@ tap_write_mbufs(struct tx_queue *txq, uint16_t num_mbufs,
                        char *buff_data = rte_pktmbuf_mtod(seg, void *);
                        proto = (*buff_data & 0xf0);
                        pi.proto = (proto == 0x40) ?
-                               rte_cpu_to_be_16(ETHER_TYPE_IPv4) :
+                               rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4) :
                                ((proto == 0x60) ?
-                                       rte_cpu_to_be_16(ETHER_TYPE_IPv6) :
+                                       rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6) :
                                        0x00);
                }
 
@@ -657,7 +655,7 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                return 0;
 
        struct rte_mbuf *gso_mbufs[MAX_GSO_MBUFS];
-       max_size = *txq->mtu + (ETHER_HDR_LEN + ETHER_CRC_LEN + 4);
+       max_size = *txq->mtu + (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + 4);
        for (i = 0; i < nb_pkts; i++) {
                struct rte_mbuf *mbuf_in = bufs[num_tx];
                struct rte_mbuf **mbuf;
@@ -677,7 +675,7 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                        /* TCP segmentation implies TCP checksum offload */
                        mbuf_in->ol_flags |= PKT_TX_TCP_CKSUM;
 
-                       /* gso size is calculated without ETHER_CRC_LEN */
+                       /* gso size is calculated without RTE_ETHER_CRC_LEN */
                        hdrs_len = mbuf_in->l2_len + mbuf_in->l3_len +
                                        mbuf_in->l4_len;
                        tso_segsz = mbuf_in->tso_segsz + hdrs_len;
@@ -917,14 +915,14 @@ tap_dev_speed_capa(void)
        return capa;
 }
 
-static void
+static int
 tap_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 {
        struct pmd_internals *internals = dev->data->dev_private;
 
        dev_info->if_index = internals->if_index;
        dev_info->max_mac_addrs = 1;
-       dev_info->max_rx_pktlen = (uint32_t)ETHER_MAX_VLAN_FRAME_LEN;
+       dev_info->max_rx_pktlen = (uint32_t)RTE_ETHER_MAX_VLAN_FRAME_LEN;
        dev_info->max_rx_queues = RTE_PMD_TAP_MAX_QUEUES;
        dev_info->max_tx_queues = RTE_PMD_TAP_MAX_QUEUES;
        dev_info->min_rx_bufsize = 0;
@@ -941,6 +939,8 @@ tap_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
         * functions together and not in partial combinations
         */
        dev_info->flow_type_rss_offloads = ~TAP_RSS_HF_MASK;
+
+       return 0;
 }
 
 static int
@@ -970,10 +970,9 @@ tap_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *tap_stats)
 
        for (i = 0; i < imax; i++) {
                tap_stats->q_opackets[i] = pmd->txq[i].stats.opackets;
-               tap_stats->q_errors[i] = pmd->txq[i].stats.errs;
                tap_stats->q_obytes[i] = pmd->txq[i].stats.obytes;
                tx_total += tap_stats->q_opackets[i];
-               tx_err_total += tap_stats->q_errors[i];
+               tx_err_total += pmd->txq[i].stats.errs;
                tx_bytes_total += tap_stats->q_obytes[i];
        }
 
@@ -1150,7 +1149,7 @@ tap_allmulti_disable(struct rte_eth_dev *dev)
 }
 
 static int
-tap_mac_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
+tap_mac_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr)
 {
        struct pmd_internals *pmd = dev->data->dev_private;
        enum ioctl_mode mode = LOCAL_ONLY;
@@ -1163,7 +1162,7 @@ tap_mac_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
                return -ENOTSUP;
        }
 
-       if (is_zero_ether_addr(mac_addr)) {
+       if (rte_is_zero_ether_addr(mac_addr)) {
                TAP_LOG(ERR, "%s: can't set an empty MAC address",
                        dev->device->name);
                return -EINVAL;
@@ -1172,22 +1171,24 @@ tap_mac_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
        ret = tap_ioctl(pmd, SIOCGIFHWADDR, &ifr, 0, LOCAL_ONLY);
        if (ret < 0)
                return ret;
-       if (is_same_ether_addr((struct ether_addr *)&ifr.ifr_hwaddr.sa_data,
-                              mac_addr))
+       if (rte_is_same_ether_addr(
+                       (struct rte_ether_addr *)&ifr.ifr_hwaddr.sa_data,
+                       mac_addr))
                return 0;
        /* Check the current MAC address on the remote */
        ret = tap_ioctl(pmd, SIOCGIFHWADDR, &ifr, 0, REMOTE_ONLY);
        if (ret < 0)
                return ret;
-       if (!is_same_ether_addr((struct ether_addr *)&ifr.ifr_hwaddr.sa_data,
-                              mac_addr))
+       if (!rte_is_same_ether_addr(
+                       (struct rte_ether_addr *)&ifr.ifr_hwaddr.sa_data,
+                       mac_addr))
                mode = LOCAL_AND_REMOTE;
        ifr.ifr_hwaddr.sa_family = AF_LOCAL;
-       rte_memcpy(ifr.ifr_hwaddr.sa_data, mac_addr, ETHER_ADDR_LEN);
+       rte_memcpy(ifr.ifr_hwaddr.sa_data, mac_addr, RTE_ETHER_ADDR_LEN);
        ret = tap_ioctl(pmd, SIOCSIFHWADDR, &ifr, 1, mode);
        if (ret < 0)
                return ret;
-       rte_memcpy(&pmd->eth_addr, mac_addr, ETHER_ADDR_LEN);
+       rte_memcpy(&pmd->eth_addr, mac_addr, RTE_ETHER_ADDR_LEN);
        if (pmd->remote_if_index && !pmd->flow_isolate) {
                /* Replace MAC redirection rule after a MAC change */
                ret = tap_flow_implicit_destroy(pmd, TAP_REMOTE_LOCAL_MAC);
@@ -1458,7 +1459,7 @@ tap_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 
 static int
 tap_set_mc_addr_list(struct rte_eth_dev *dev __rte_unused,
-                    struct ether_addr *mc_addr_set __rte_unused,
+                    struct rte_ether_addr *mc_addr_set __rte_unused,
                     uint32_t nb_mc_addr __rte_unused)
 {
        /*
@@ -1682,7 +1683,7 @@ static const char *tuntap_types[ETH_TUNTAP_TYPE_MAX] = {
 
 static int
 eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
-                  char *remote_iface, struct ether_addr *mac_addr,
+                  char *remote_iface, struct rte_ether_addr *mac_addr,
                   enum rte_tuntap_type type)
 {
        int numa_node = rte_socket_id();
@@ -1753,8 +1754,8 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
        }
 
        if (pmd->type == ETH_TUNTAP_TYPE_TAP) {
-               if (is_zero_ether_addr(mac_addr))
-                       eth_random_addr((uint8_t *)&pmd->eth_addr);
+               if (rte_is_zero_ether_addr(mac_addr))
+                       rte_eth_random_addr((uint8_t *)&pmd->eth_addr);
                else
                        rte_memcpy(&pmd->eth_addr, mac_addr, sizeof(*mac_addr));
        }
@@ -1780,7 +1781,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
                memset(&ifr, 0, sizeof(struct ifreq));
                ifr.ifr_hwaddr.sa_family = AF_LOCAL;
                rte_memcpy(ifr.ifr_hwaddr.sa_data, &pmd->eth_addr,
-                               ETHER_ADDR_LEN);
+                               RTE_ETHER_ADDR_LEN);
                if (tap_ioctl(pmd, SIOCSIFHWADDR, &ifr, 0, LOCAL_ONLY) < 0)
                        goto error_exit;
        }
@@ -1835,7 +1836,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
                        goto error_remote;
                }
                rte_memcpy(&pmd->eth_addr, ifr.ifr_hwaddr.sa_data,
-                          ETHER_ADDR_LEN);
+                          RTE_ETHER_ADDR_LEN);
                /* The desired MAC is already in ifreq after SIOCGIFHWADDR. */
                if (tap_ioctl(pmd, SIOCSIFHWADDR, &ifr, 0, LOCAL_ONLY) < 0) {
                        TAP_LOG(ERR, "%s: failed to get %s MAC address.",
@@ -1957,7 +1958,7 @@ set_remote_iface(const char *key __rte_unused,
        return 0;
 }
 
-static int parse_user_mac(struct ether_addr *user_mac,
+static int parse_user_mac(struct rte_ether_addr *user_mac,
                const char *value)
 {
        unsigned int index = 0;
@@ -1985,7 +1986,7 @@ set_mac_type(const char *key __rte_unused,
             const char *value,
             void *extra_args)
 {
-       struct ether_addr *user_mac = extra_args;
+       struct rte_ether_addr *user_mac = extra_args;
 
        if (!value)
                return 0;
@@ -1994,8 +1995,10 @@ set_mac_type(const char *key __rte_unused,
                static int iface_idx;
 
                /* fixed mac = 00:64:74:61:70:<iface_idx> */
-               memcpy((char *)user_mac->addr_bytes, "\0dtap", ETHER_ADDR_LEN);
-               user_mac->addr_bytes[ETHER_ADDR_LEN - 1] = iface_idx++ + '0';
+               memcpy((char *)user_mac->addr_bytes, "\0dtap",
+                       RTE_ETHER_ADDR_LEN);
+               user_mac->addr_bytes[RTE_ETHER_ADDR_LEN - 1] =
+                       iface_idx++ + '0';
                goto success;
        }
 
@@ -2198,7 +2201,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
        int speed;
        char tap_name[RTE_ETH_NAME_MAX_LEN];
        char remote_iface[RTE_ETH_NAME_MAX_LEN];
-       struct ether_addr user_mac = { .addr_bytes = {0} };
+       struct rte_ether_addr user_mac = { .addr_bytes = {0} };
        struct rte_eth_dev *eth_dev;
        int tap_devices_count_increased = 0;
 
@@ -2283,7 +2286,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
        /* Register IPC feed callback */
        if (!tap_devices_count) {
                ret = rte_mp_action_register(TAP_MP_KEY, tap_mp_sync_queues);
-               if (ret < 0) {
+               if (ret < 0 && rte_errno != ENOTSUP) {
                        TAP_LOG(ERR, "tap: Failed to register IPC callback: %s",
                                strerror(rte_errno));
                        goto leave;