X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Ftap%2Frte_eth_tap.c;h=37ac18f951cf2570ebde39cf79429a1308b7ffef;hb=0663a84524e5c63cb737cd723b4ea33493e8d17a;hp=0d217f1486f6cf5121f152b30d0efe62714fbad4;hpb=23d8e85e44a5c30b7705c7ab90a4bff7d28015e5;p=dpdk.git diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 0d217f1486..37ac18f951 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -7,8 +7,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -70,6 +70,17 @@ #define TAP_IOV_DEFAULT_MAX 1024 +#define TAP_RX_OFFLOAD (RTE_ETH_RX_OFFLOAD_SCATTER | \ + RTE_ETH_RX_OFFLOAD_IPV4_CKSUM | \ + RTE_ETH_RX_OFFLOAD_UDP_CKSUM | \ + RTE_ETH_RX_OFFLOAD_TCP_CKSUM) + +#define TAP_TX_OFFLOAD (RTE_ETH_TX_OFFLOAD_MULTI_SEGS | \ + RTE_ETH_TX_OFFLOAD_IPV4_CKSUM | \ + RTE_ETH_TX_OFFLOAD_UDP_CKSUM | \ + RTE_ETH_TX_OFFLOAD_TCP_CKSUM | \ + RTE_ETH_TX_OFFLOAD_TCP_TSO) + static int tap_devices_count; static const char *tuntap_types[ETH_TUNTAP_TYPE_MAX] = { @@ -86,10 +97,10 @@ static const char *valid_arguments[] = { static volatile uint32_t tap_trigger; /* Rx trigger */ static struct rte_eth_link pmd_link = { - .link_speed = ETH_SPEED_NUM_10G, - .link_duplex = ETH_LINK_FULL_DUPLEX, - .link_status = ETH_LINK_DOWN, - .link_autoneg = ETH_LINK_FIXED, + .link_speed = RTE_ETH_SPEED_NUM_10G, + .link_duplex = RTE_ETH_LINK_FULL_DUPLEX, + .link_status = RTE_ETH_LINK_DOWN, + .link_autoneg = RTE_ETH_LINK_FIXED, }; static void @@ -303,6 +314,7 @@ tap_verify_csum(struct rte_mbuf *mbuf) uint16_t cksum = 0; void *l3_hdr; void *l4_hdr; + struct rte_udp_hdr *udp_hdr; if (l2 == RTE_PTYPE_L2_ETHER_VLAN) l2_len += 4; @@ -316,8 +328,7 @@ tap_verify_csum(struct rte_mbuf *mbuf) if (l3 == RTE_PTYPE_L3_IPV4 || l3 == RTE_PTYPE_L3_IPV4_EXT) { 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); + l3_len = rte_ipv4_hdr_len(iph); if (unlikely(l2_len + l3_len > rte_pktmbuf_data_len(mbuf))) return; /* check that the total length reported by header is not @@ -329,8 +340,8 @@ tap_verify_csum(struct rte_mbuf *mbuf) cksum = ~rte_raw_cksum(iph, l3_len); mbuf->ol_flags |= cksum ? - PKT_RX_IP_CKSUM_BAD : - PKT_RX_IP_CKSUM_GOOD; + RTE_MBUF_F_RX_IP_CKSUM_BAD : + RTE_MBUF_F_RX_IP_CKSUM_GOOD; } else if (l3 == RTE_PTYPE_L3_IPV6) { struct rte_ipv6_hdr *iph = l3_hdr; @@ -342,42 +353,44 @@ tap_verify_csum(struct rte_mbuf *mbuf) rte_pktmbuf_data_len(mbuf)) return; } else { - /* IPv6 extensions are not supported */ + /* - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN cannot happen because + * mbuf->packet_type is filled by rte_net_get_ptype() which + * never returns this value. + * - IPv6 extensions are not supported. + */ return; } if (l4 == RTE_PTYPE_L4_UDP || l4 == RTE_PTYPE_L4_TCP) { + int cksum_ok; + l4_hdr = rte_pktmbuf_mtod_offset(mbuf, void *, l2_len + l3_len); /* Don't verify checksum for multi-segment packets. */ if (mbuf->nb_segs > 1) return; - if (l3 == RTE_PTYPE_L3_IPV4) - cksum = ~rte_ipv4_udptcp_cksum(l3_hdr, l4_hdr); - else if (l3 == RTE_PTYPE_L3_IPV6) - cksum = ~rte_ipv6_udptcp_cksum(l3_hdr, l4_hdr); - mbuf->ol_flags |= cksum ? - PKT_RX_L4_CKSUM_BAD : - PKT_RX_L4_CKSUM_GOOD; + if (l3 == RTE_PTYPE_L3_IPV4 || l3 == RTE_PTYPE_L3_IPV4_EXT) { + if (l4 == RTE_PTYPE_L4_UDP) { + udp_hdr = (struct rte_udp_hdr *)l4_hdr; + if (udp_hdr->dgram_cksum == 0) { + /* + * For IPv4, a zero UDP checksum + * indicates that the sender did not + * generate one [RFC 768]. + */ + mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_NONE; + return; + } + } + cksum_ok = !rte_ipv4_udptcp_cksum_verify(l3_hdr, + l4_hdr); + } else { /* l3 == RTE_PTYPE_L3_IPV6, checked above */ + cksum_ok = !rte_ipv6_udptcp_cksum_verify(l3_hdr, + l4_hdr); + } + mbuf->ol_flags |= cksum_ok ? + RTE_MBUF_F_RX_L4_CKSUM_GOOD : RTE_MBUF_F_RX_L4_CKSUM_BAD; } } -static uint64_t -tap_rx_offload_get_port_capa(void) -{ - /* - * No specific port Rx offload capabilities. - */ - return 0; -} - -static uint64_t -tap_rx_offload_get_queue_capa(void) -{ - return DEV_RX_OFFLOAD_SCATTER | - DEV_RX_OFFLOAD_IPV4_CKSUM | - DEV_RX_OFFLOAD_UDP_CKSUM | - DEV_RX_OFFLOAD_TCP_CKSUM; -} - static void tap_rxq_pool_free(struct rte_mbuf *pool) { @@ -420,7 +433,7 @@ pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) len = readv(process_private->rxq_fds[rxq->queue_id], *rxq->iovecs, - 1 + (rxq->rxmode->offloads & DEV_RX_OFFLOAD_SCATTER ? + 1 + (rxq->rxmode->offloads & RTE_ETH_RX_OFFLOAD_SCATTER ? rxq->nb_rx_desc : 1)); if (len < (int)sizeof(struct tun_pi)) break; @@ -476,7 +489,7 @@ pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) seg->next = NULL; mbuf->packet_type = rte_net_get_ptype(mbuf, NULL, RTE_PTYPE_ALL_MASK); - if (rxq->rxmode->offloads & DEV_RX_OFFLOAD_CHECKSUM) + if (rxq->rxmode->offloads & RTE_ETH_RX_OFFLOAD_CHECKSUM) tap_verify_csum(mbuf); /* account for the receive frame */ @@ -493,25 +506,6 @@ end: return num_rx; } -static uint64_t -tap_tx_offload_get_port_capa(void) -{ - /* - * No specific port Tx offload capabilities. - */ - return 0; -} - -static uint64_t -tap_tx_offload_get_queue_capa(void) -{ - return DEV_TX_OFFLOAD_MULTI_SEGS | - DEV_TX_OFFLOAD_IPV4_CKSUM | - DEV_TX_OFFLOAD_UDP_CKSUM | - DEV_TX_OFFLOAD_TCP_CKSUM | - DEV_TX_OFFLOAD_TCP_TSO; -} - /* Finalize l4 checksum calculation */ static void tap_tx_l4_cksum(uint16_t *l4_cksum, uint16_t l4_phdr_cksum, @@ -550,7 +544,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)) { + if (ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_IPV4)) { struct rte_ipv4_hdr *iph = l3_hdr; uint16_t cksum; @@ -558,18 +552,18 @@ tap_tx_l3_cksum(char *packet, uint64_t ol_flags, unsigned int l2_len, cksum = rte_raw_cksum(iph, l3_len); iph->hdr_checksum = (cksum == 0xffff) ? cksum : ~cksum; } - if (ol_flags & PKT_TX_L4_MASK) { + if (ol_flags & RTE_MBUF_F_TX_L4_MASK) { void *l4_hdr; l4_hdr = packet + l2_len + l3_len; - if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM) + if ((ol_flags & RTE_MBUF_F_TX_L4_MASK) == RTE_MBUF_F_TX_UDP_CKSUM) *l4_cksum = &((struct rte_udp_hdr *)l4_hdr)->dgram_cksum; - else if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM) + else if ((ol_flags & RTE_MBUF_F_TX_L4_MASK) == RTE_MBUF_F_TX_TCP_CKSUM) *l4_cksum = &((struct rte_tcp_hdr *)l4_hdr)->cksum; else return; **l4_cksum = 0; - if (ol_flags & PKT_TX_IPV4) + if (ol_flags & RTE_MBUF_F_TX_IPV4) *l4_phdr_cksum = rte_ipv4_phdr_cksum(l3_hdr, 0); else *l4_phdr_cksum = rte_ipv6_phdr_cksum(l3_hdr, 0); @@ -633,9 +627,9 @@ tap_write_mbufs(struct tx_queue *txq, uint16_t num_mbufs, nb_segs = mbuf->nb_segs; if (txq->csum && - ((mbuf->ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4) || - (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM || - (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM))) { + ((mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_IPV4) || + (mbuf->ol_flags & RTE_MBUF_F_TX_L4_MASK) == RTE_MBUF_F_TX_UDP_CKSUM || + (mbuf->ol_flags & RTE_MBUF_F_TX_L4_MASK) == RTE_MBUF_F_TX_TCP_CKSUM))) { is_cksum = 1; /* Support only packets with at least layer 4 @@ -725,12 +719,12 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) uint16_t hdrs_len; uint64_t tso; - tso = mbuf_in->ol_flags & PKT_TX_TCP_SEG; + tso = mbuf_in->ol_flags & RTE_MBUF_F_TX_TCP_SEG; if (tso) { struct rte_gso_ctx *gso_ctx = &txq->gso_ctx; /* TCP segmentation implies TCP checksum offload */ - mbuf_in->ol_flags |= PKT_TX_TCP_CKSUM; + mbuf_in->ol_flags |= RTE_MBUF_F_TX_TCP_CKSUM; /* gso size is calculated without RTE_ETHER_CRC_LEN */ hdrs_len = mbuf_in->l2_len + mbuf_in->l3_len + @@ -752,8 +746,16 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) if (num_tso_mbufs < 0) break; - mbuf = gso_mbufs; - num_mbufs = num_tso_mbufs; + if (num_tso_mbufs >= 1) { + mbuf = gso_mbufs; + num_mbufs = num_tso_mbufs; + } else { + /* 0 means it can be transmitted directly + * without gso. + */ + mbuf = &mbuf_in; + num_mbufs = 1; + } } else { /* stats.errs will be incremented */ if (rte_pktmbuf_pkt_len(mbuf_in) > max_size) @@ -864,7 +866,7 @@ tap_link_set_down(struct rte_eth_dev *dev) struct pmd_internals *pmd = dev->data->dev_private; struct ifreq ifr = { .ifr_flags = IFF_UP }; - dev->data->dev_link.link_status = ETH_LINK_DOWN; + dev->data->dev_link.link_status = RTE_ETH_LINK_DOWN; return tap_ioctl(pmd, SIOCSIFFLAGS, &ifr, 0, LOCAL_ONLY); } @@ -874,7 +876,7 @@ tap_link_set_up(struct rte_eth_dev *dev) struct pmd_internals *pmd = dev->data->dev_private; struct ifreq ifr = { .ifr_flags = IFF_UP }; - dev->data->dev_link.link_status = ETH_LINK_UP; + dev->data->dev_link.link_status = RTE_ETH_LINK_UP; return tap_ioctl(pmd, SIOCSIFFLAGS, &ifr, 1, LOCAL_AND_REMOTE); } @@ -901,7 +903,7 @@ tap_dev_start(struct rte_eth_dev *dev) /* This function gets called when the current port gets stopped. */ -static void +static int tap_dev_stop(struct rte_eth_dev *dev) { int i; @@ -913,6 +915,8 @@ tap_dev_stop(struct rte_eth_dev *dev) tap_intr_handle_set(dev, 0); tap_link_set_down(dev); + + return 0; } static int @@ -952,30 +956,30 @@ tap_dev_speed_capa(void) uint32_t speed = pmd_link.link_speed; uint32_t capa = 0; - if (speed >= ETH_SPEED_NUM_10M) - capa |= ETH_LINK_SPEED_10M; - if (speed >= ETH_SPEED_NUM_100M) - capa |= ETH_LINK_SPEED_100M; - if (speed >= ETH_SPEED_NUM_1G) - capa |= ETH_LINK_SPEED_1G; - if (speed >= ETH_SPEED_NUM_5G) - capa |= ETH_LINK_SPEED_2_5G; - if (speed >= ETH_SPEED_NUM_5G) - capa |= ETH_LINK_SPEED_5G; - if (speed >= ETH_SPEED_NUM_10G) - capa |= ETH_LINK_SPEED_10G; - if (speed >= ETH_SPEED_NUM_20G) - capa |= ETH_LINK_SPEED_20G; - if (speed >= ETH_SPEED_NUM_25G) - capa |= ETH_LINK_SPEED_25G; - if (speed >= ETH_SPEED_NUM_40G) - capa |= ETH_LINK_SPEED_40G; - if (speed >= ETH_SPEED_NUM_50G) - capa |= ETH_LINK_SPEED_50G; - if (speed >= ETH_SPEED_NUM_56G) - capa |= ETH_LINK_SPEED_56G; - if (speed >= ETH_SPEED_NUM_100G) - capa |= ETH_LINK_SPEED_100G; + if (speed >= RTE_ETH_SPEED_NUM_10M) + capa |= RTE_ETH_LINK_SPEED_10M; + if (speed >= RTE_ETH_SPEED_NUM_100M) + capa |= RTE_ETH_LINK_SPEED_100M; + if (speed >= RTE_ETH_SPEED_NUM_1G) + capa |= RTE_ETH_LINK_SPEED_1G; + if (speed >= RTE_ETH_SPEED_NUM_5G) + capa |= RTE_ETH_LINK_SPEED_2_5G; + if (speed >= RTE_ETH_SPEED_NUM_5G) + capa |= RTE_ETH_LINK_SPEED_5G; + if (speed >= RTE_ETH_SPEED_NUM_10G) + capa |= RTE_ETH_LINK_SPEED_10G; + if (speed >= RTE_ETH_SPEED_NUM_20G) + capa |= RTE_ETH_LINK_SPEED_20G; + if (speed >= RTE_ETH_SPEED_NUM_25G) + capa |= RTE_ETH_LINK_SPEED_25G; + if (speed >= RTE_ETH_SPEED_NUM_40G) + capa |= RTE_ETH_LINK_SPEED_40G; + if (speed >= RTE_ETH_SPEED_NUM_50G) + capa |= RTE_ETH_LINK_SPEED_50G; + if (speed >= RTE_ETH_SPEED_NUM_56G) + capa |= RTE_ETH_LINK_SPEED_56G; + if (speed >= RTE_ETH_SPEED_NUM_100G) + capa |= RTE_ETH_LINK_SPEED_100G; return capa; } @@ -992,18 +996,17 @@ tap_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->max_tx_queues = RTE_PMD_TAP_MAX_QUEUES; dev_info->min_rx_bufsize = 0; dev_info->speed_capa = tap_dev_speed_capa(); - dev_info->rx_queue_offload_capa = tap_rx_offload_get_queue_capa(); - dev_info->rx_offload_capa = tap_rx_offload_get_port_capa() | - dev_info->rx_queue_offload_capa; - dev_info->tx_queue_offload_capa = tap_tx_offload_get_queue_capa(); - dev_info->tx_offload_capa = tap_tx_offload_get_port_capa() | - dev_info->tx_queue_offload_capa; + dev_info->rx_queue_offload_capa = TAP_RX_OFFLOAD; + dev_info->rx_offload_capa = dev_info->rx_queue_offload_capa; + dev_info->tx_queue_offload_capa = TAP_TX_OFFLOAD; + dev_info->tx_offload_capa = dev_info->tx_queue_offload_capa; dev_info->hash_key_size = TAP_RSS_HASH_KEY_SIZE; /* * limitation: TAP supports all of IP, UDP and TCP hash * functions together and not in partial combinations */ dev_info->flow_type_rss_offloads = ~TAP_RSS_HF_MASK; + dev_info->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP; return 0; } @@ -1110,8 +1113,11 @@ tap_dev_close(struct rte_eth_dev *dev) if (internals->remote_if_index) { /* Restore initial remote state */ - ioctl(internals->ioctl_sock, SIOCSIFFLAGS, + int ret = ioctl(internals->ioctl_sock, SIOCSIFFLAGS, &internals->remote_initial_flags); + if (ret) + TAP_LOG(ERR, "restore remote state failed: %d", ret); + } rte_mempool_free(internals->gso_ctx_mp); @@ -1134,7 +1140,6 @@ tap_dev_close(struct rte_eth_dev *dev) internals->ioctl_sock = -1; } rte_free(dev->process_private); - dev->process_private = NULL; if (tap_devices_count == 1) rte_mp_action_unregister(TAP_MP_KEY); tap_devices_count--; @@ -1147,9 +1152,9 @@ tap_dev_close(struct rte_eth_dev *dev) } static void -tap_rx_queue_release(void *queue) +tap_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid) { - struct rx_queue *rxq = queue; + struct rx_queue *rxq = dev->data->rx_queues[qid]; struct pmd_process_private *process_private; if (!rxq) @@ -1166,9 +1171,9 @@ tap_rx_queue_release(void *queue) } static void -tap_tx_queue_release(void *queue) +tap_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid) { - struct tx_queue *txq = queue; + struct tx_queue *txq = dev->data->tx_queues[qid]; struct pmd_process_private *process_private; if (!txq) @@ -1192,15 +1197,15 @@ tap_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused) tap_ioctl(pmd, SIOCGIFFLAGS, &ifr, 0, REMOTE_ONLY); if (!(ifr.ifr_flags & IFF_UP) || !(ifr.ifr_flags & IFF_RUNNING)) { - dev_link->link_status = ETH_LINK_DOWN; + dev_link->link_status = RTE_ETH_LINK_DOWN; return 0; } } tap_ioctl(pmd, SIOCGIFFLAGS, &ifr, 0, LOCAL_ONLY); dev_link->link_status = ((ifr.ifr_flags & IFF_UP) && (ifr.ifr_flags & IFF_RUNNING) ? - ETH_LINK_UP : - ETH_LINK_DOWN); + RTE_ETH_LINK_UP : + RTE_ETH_LINK_DOWN); return 0; } @@ -1387,7 +1392,7 @@ tap_gso_ctx_setup(struct rte_gso_ctx *gso_ctx, struct rte_eth_dev *dev) int ret; /* initialize GSO context */ - gso_types = DEV_TX_OFFLOAD_TCP_TSO; + gso_types = RTE_ETH_TX_OFFLOAD_TCP_TSO; if (!pmd->gso_ctx_mp) { /* * Create private mbuf pool with TAP_GSO_MBUF_SEG_SIZE @@ -1602,9 +1607,9 @@ tap_tx_queue_setup(struct rte_eth_dev *dev, offloads = tx_conf->offloads | dev->data->dev_conf.txmode.offloads; txq->csum = !!(offloads & - (DEV_TX_OFFLOAD_IPV4_CKSUM | - DEV_TX_OFFLOAD_UDP_CKSUM | - DEV_TX_OFFLOAD_TCP_CKSUM)); + (RTE_ETH_TX_OFFLOAD_IPV4_CKSUM | + RTE_ETH_TX_OFFLOAD_UDP_CKSUM | + RTE_ETH_TX_OFFLOAD_TCP_CKSUM)); ret = tap_setup_queue(dev, internals, tx_queue_id, 0); if (ret == -1) @@ -1623,13 +1628,8 @@ tap_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) { struct pmd_internals *pmd = dev->data->dev_private; struct ifreq ifr = { .ifr_mtu = mtu }; - int err = 0; - err = tap_ioctl(pmd, SIOCSIFMTU, &ifr, 1, LOCAL_AND_REMOTE); - if (!err) - dev->data->mtu = mtu; - - return err; + return tap_ioctl(pmd, SIOCSIFMTU, &ifr, 1, LOCAL_AND_REMOTE); } static int @@ -1664,7 +1664,8 @@ tap_dev_intr_handler(void *cb_arg) struct rte_eth_dev *dev = cb_arg; struct pmd_internals *pmd = dev->data->dev_private; - tap_nl_recv(pmd->intr_handle.fd, tap_nl_msg_handler, dev); + tap_nl_recv(rte_intr_fd_get(pmd->intr_handle), + tap_nl_msg_handler, dev); } static int @@ -1675,22 +1676,22 @@ tap_lsc_intr_handle_set(struct rte_eth_dev *dev, int set) /* In any case, disable interrupt if the conf is no longer there. */ if (!dev->data->dev_conf.intr_conf.lsc) { - if (pmd->intr_handle.fd != -1) { + if (rte_intr_fd_get(pmd->intr_handle) != -1) goto clean; - } + return 0; } if (set) { - pmd->intr_handle.fd = tap_nl_init(RTMGRP_LINK); - if (unlikely(pmd->intr_handle.fd == -1)) + rte_intr_fd_set(pmd->intr_handle, tap_nl_init(RTMGRP_LINK)); + if (unlikely(rte_intr_fd_get(pmd->intr_handle) == -1)) return -EBADF; return rte_intr_callback_register( - &pmd->intr_handle, tap_dev_intr_handler, dev); + pmd->intr_handle, tap_dev_intr_handler, dev); } clean: do { - ret = rte_intr_callback_unregister(&pmd->intr_handle, + ret = rte_intr_callback_unregister(pmd->intr_handle, tap_dev_intr_handler, dev); if (ret >= 0) { break; @@ -1703,8 +1704,8 @@ clean: } } while (true); - tap_nl_final(pmd->intr_handle.fd); - pmd->intr_handle.fd = -1; + tap_nl_final(rte_intr_fd_get(pmd->intr_handle)); + rte_intr_fd_set(pmd->intr_handle, -1); return 0; } @@ -1761,7 +1762,7 @@ static int tap_flow_ctrl_get(struct rte_eth_dev *dev __rte_unused, struct rte_eth_fc_conf *fc_conf) { - fc_conf->mode = RTE_FC_NONE; + fc_conf->mode = RTE_ETH_FC_NONE; return 0; } @@ -1769,7 +1770,7 @@ static int tap_flow_ctrl_set(struct rte_eth_dev *dev __rte_unused, struct rte_eth_fc_conf *fc_conf) { - if (fc_conf->mode != RTE_FC_NONE) + if (fc_conf->mode != RTE_ETH_FC_NONE) return -ENOTSUP; return 0; } @@ -1868,7 +1869,7 @@ static const struct eth_dev_ops ops = { .stats_reset = tap_stats_reset, .dev_supported_ptypes_get = tap_dev_supported_ptypes_get, .rss_hash_update = tap_rss_hash_update, - .filter_ctrl = tap_dev_filter_ctrl, + .flow_ops_get = tap_dev_flow_ops_get, }; static int @@ -1919,10 +1920,18 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, goto error_exit; } + /* Allocate interrupt instance */ + pmd->intr_handle = rte_intr_instance_alloc(RTE_INTR_INSTANCE_F_SHARED); + if (pmd->intr_handle == NULL) { + TAP_LOG(ERR, "Failed to allocate intr handle"); + goto error_exit; + } + /* Setup some default values */ data = dev->data; data->dev_private = pmd; - data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; + data->dev_flags = RTE_ETH_DEV_INTR_LSC | + RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; data->numa_node = numa_node; data->dev_link = pmd_link; @@ -1935,9 +1944,9 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, dev->rx_pkt_burst = pmd_rx_burst; dev->tx_pkt_burst = pmd_tx_burst; - pmd->intr_handle.type = RTE_INTR_HANDLE_EXT; - pmd->intr_handle.fd = -1; - dev->intr_handle = &pmd->intr_handle; + rte_intr_type_set(pmd->intr_handle, RTE_INTR_HANDLE_EXT); + rte_intr_fd_set(pmd->intr_handle, -1); + dev->intr_handle = pmd->intr_handle; /* Presetup the fds to -1 as being not valid */ for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) { @@ -2088,6 +2097,7 @@ error_exit: /* mac_addrs must not be freed alone because part of dev_private */ dev->data->mac_addrs = NULL; rte_eth_dev_release_port(dev); + rte_intr_instance_free(pmd->intr_handle); error_exit_nodev: TAP_LOG(ERR, "%s Unable to initialize %s", @@ -2262,7 +2272,7 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev) } } } - pmd_link.link_speed = ETH_SPEED_NUM_10G; + pmd_link.link_speed = RTE_ETH_SPEED_NUM_10G; TAP_LOG(DEBUG, "Initializing pmd_tun for %s", name); @@ -2436,7 +2446,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev) return 0; } - speed = ETH_SPEED_NUM_10G; + speed = RTE_ETH_SPEED_NUM_10G; /* use tap%d which causes kernel to choose next available */ strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN); @@ -2545,4 +2555,4 @@ RTE_PMD_REGISTER_PARAM_STRING(net_tap, ETH_TAP_IFACE_ARG "= " ETH_TAP_MAC_ARG "=" ETH_TAP_MAC_ARG_FMT " " ETH_TAP_REMOTE_ARG "="); -RTE_LOG_REGISTER(tap_logtype, pmd.net.tap, NOTICE); +RTE_LOG_REGISTER_DEFAULT(tap_logtype, NOTICE);