On 1/18/2018 3:14 AM, Yuanhan Liu wrote:
> Due to a mistake operation from me, older version (v10) was merged to
> master branch. It's the v11 should be applied. However, the master branch
> is not rebase-able. Thus, this patch is made, from the diff between v10
> and v11.
> 
> Code is from Xiao Wang.

    Fixes: 45ae05df824c ("net: add a helper for making RARP packet")
    Fixes: c3ffdba0e88a ("vhost: use API to make RARP packet")

Please correct me if there are wrong.

> 
> Signed-off-by: Yuanhan Liu <y...@fridaylinux.org>
> ---
>  lib/librte_net/rte_arp.c      | 26 +++++++++++++++++---------
>  lib/librte_net/rte_arp.h      | 11 ++++++-----
>  lib/librte_vhost/virtio_net.c | 12 +++---------
>  3 files changed, 26 insertions(+), 23 deletions(-)
> 
> diff --git a/lib/librte_net/rte_arp.c b/lib/librte_net/rte_arp.c
> index d7223b0..b953bcd 100644
> --- a/lib/librte_net/rte_arp.c
> +++ b/lib/librte_net/rte_arp.c
> @@ -7,17 +7,28 @@
>  #include <rte_arp.h>
>  
>  #define RARP_PKT_SIZE        64
> -int
> -rte_net_make_rarp_packet(struct rte_mbuf *mbuf, const struct ether_addr *mac)
> +struct rte_mbuf *
> +rte_net_make_rarp_packet(struct rte_mempool *mpool,
> +             const struct ether_addr *mac)
>  {
>       struct ether_hdr *eth_hdr;
>       struct arp_hdr *rarp;
> +     struct rte_mbuf *mbuf;
>  
> -     if (mbuf->buf_len < RARP_PKT_SIZE)
> -             return -1;
> +     if (mpool == NULL)
> +             return NULL;
> +
> +     mbuf = rte_pktmbuf_alloc(mpool);
> +     if (mbuf == NULL)
> +             return NULL;
> +
> +     eth_hdr = (struct ether_hdr *)rte_pktmbuf_append(mbuf, RARP_PKT_SIZE);
> +     if (eth_hdr == NULL) {
> +             rte_pktmbuf_free(mbuf);
> +             return NULL;
> +     }
>  
>       /* Ethernet header. */
> -     eth_hdr = rte_pktmbuf_mtod(mbuf, struct ether_hdr *);
>       memset(eth_hdr->d_addr.addr_bytes, 0xff, ETHER_ADDR_LEN);
>       ether_addr_copy(mac, &eth_hdr->s_addr);
>       eth_hdr->ether_type = htons(ETHER_TYPE_RARP);
> @@ -35,8 +46,5 @@ rte_net_make_rarp_packet(struct rte_mbuf *mbuf, const 
> struct ether_addr *mac)
>       memset(&rarp->arp_data.arp_sip, 0x00, 4);
>       memset(&rarp->arp_data.arp_tip, 0x00, 4);
>  
> -     mbuf->data_len = RARP_PKT_SIZE;
> -     mbuf->pkt_len = RARP_PKT_SIZE;
> -
> -     return 0;
> +     return mbuf;
>  }
> diff --git a/lib/librte_net/rte_arp.h b/lib/librte_net/rte_arp.h
> index dad7423..457a39b 100644
> --- a/lib/librte_net/rte_arp.h
> +++ b/lib/librte_net/rte_arp.h
> @@ -82,16 +82,17 @@ struct arp_hdr {
>   *
>   * Make a RARP packet based on MAC addr.
>   *
> - * @param mbuf
> - *   Pointer to the rte_mbuf structure
> + * @param mpool
> + *   Pointer to the rte_mempool
>   * @param mac
>   *   Pointer to the MAC addr
>   *
>   * @return
> - *   - 0 on success, negative on error
> + *   - RARP packet pointer on success, or NULL on error
>   */
> -int
> -rte_net_make_rarp_packet(struct rte_mbuf *mbuf, const struct ether_addr 
> *mac);
> +struct rte_mbuf *
> +rte_net_make_rarp_packet(struct rte_mempool *mpool,
> +             const struct ether_addr *mac);
>  
>  #ifdef __cplusplus
>  }
> diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
> index ca89288..a1d8026 100644
> --- a/lib/librte_vhost/virtio_net.c
> +++ b/lib/librte_vhost/virtio_net.c
> @@ -1162,19 +1162,13 @@ rte_vhost_dequeue_burst(int vid, uint16_t queue_id,
>                       rte_atomic16_cmpset((volatile uint16_t *)
>                               &dev->broadcast_rarp.cnt, 1, 0))) {
>  
> -             rarp_mbuf = rte_pktmbuf_alloc(mbuf_pool);
> +             rarp_mbuf = rte_net_make_rarp_packet(mbuf_pool, &dev->mac);
>               if (rarp_mbuf == NULL) {
>                       RTE_LOG(ERR, VHOST_DATA,
> -                             "Failed to allocate memory for mbuf.\n");
> +                             "Failed to make RARP packet.\n");
>                       return 0;
>               }
> -
> -             if (rte_net_make_rarp_packet(rarp_mbuf, &dev->mac) < 0) {
> -                     rte_pktmbuf_free(rarp_mbuf);
> -                     rarp_mbuf = NULL;
> -             } else {
> -                     count -= 1;
> -             }
> +             count -= 1;
>       }
>  
>       free_entries = *((volatile uint16_t *)&vq->avail->idx) -
> 

Reply via email to