X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_net%2Frte_arp.c;h=f0ed9bd682965eb6237aa1aa3e5bf0bea8a389f3;hb=b0a1502a277cafe29e647d74f5fbbb3a153c63c7;hp=d7223b044dd5867f8b3f844cf6604400341c1766;hpb=45ae05df824c49769e591b7fc8728855bba9ab0b;p=dpdk.git diff --git a/lib/librte_net/rte_arp.c b/lib/librte_net/rte_arp.c index d7223b044d..f0ed9bd682 100644 --- a/lib/librte_net/rte_arp.c +++ b/lib/librte_net/rte_arp.c @@ -7,17 +7,28 @@ #include #define RARP_PKT_SIZE 64 -int -rte_net_make_rarp_packet(struct rte_mbuf *mbuf, const struct ether_addr *mac) +struct rte_mbuf * __rte_experimental +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, ð_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; }