X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_net%2Frte_arp.c;h=784b7f48faeadefd87b48187490d744dcd6da7b8;hb=675f65dc660805eff1953e3dfb6242ec076a9444;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..784b7f48fa 100644 --- a/lib/librte_net/rte_arp.c +++ b/lib/librte_net/rte_arp.c @@ -7,36 +7,45 @@ #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_net_make_rarp_packet(struct rte_mempool *mpool, + const struct rte_ether_addr *mac) { - struct ether_hdr *eth_hdr; - struct arp_hdr *rarp; + struct rte_ether_hdr *eth_hdr; + struct rte_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 rte_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); + memset(eth_hdr->d_addr.addr_bytes, 0xff, RTE_ETHER_ADDR_LEN); + rte_ether_addr_copy(mac, ð_hdr->s_addr); + eth_hdr->ether_type = htons(RTE_ETHER_TYPE_RARP); /* RARP header. */ - rarp = (struct arp_hdr *)(eth_hdr + 1); - rarp->arp_hrd = htons(ARP_HRD_ETHER); - rarp->arp_pro = htons(ETHER_TYPE_IPv4); - rarp->arp_hln = ETHER_ADDR_LEN; - rarp->arp_pln = 4; - rarp->arp_op = htons(ARP_OP_REVREQUEST); - - ether_addr_copy(mac, &rarp->arp_data.arp_sha); - ether_addr_copy(mac, &rarp->arp_data.arp_tha); + rarp = (struct rte_arp_hdr *)(eth_hdr + 1); + rarp->arp_hardware = htons(RTE_ARP_HRD_ETHER); + rarp->arp_protocol = htons(RTE_ETHER_TYPE_IPV4); + rarp->arp_hlen = RTE_ETHER_ADDR_LEN; + rarp->arp_plen = 4; + rarp->arp_opcode = htons(RTE_ARP_OP_REVREQUEST); + + rte_ether_addr_copy(mac, &rarp->arp_data.arp_sha); + rte_ether_addr_copy(mac, &rarp->arp_data.arp_tha); 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; }