| 6 | |
| 7 | #define RARP_PKT_SIZE 64 |
| 8 | struct rte_mbuf * |
| 9 | rte_net_make_rarp_packet(struct rte_mempool *mpool, |
| 10 | const struct rte_ether_addr *mac) |
| 11 | { |
| 12 | struct rte_ether_hdr *eth_hdr; |
| 13 | struct rte_arp_hdr *rarp; |
| 14 | struct rte_mbuf *mbuf; |
| 15 | |
| 16 | if (mpool == NULL) |
| 17 | return NULL; |
| 18 | |
| 19 | mbuf = rte_pktmbuf_alloc(mpool); |
| 20 | if (mbuf == NULL) |
| 21 | return NULL; |
| 22 | |
| 23 | eth_hdr = (struct rte_ether_hdr *) |
| 24 | rte_pktmbuf_append(mbuf, RARP_PKT_SIZE); |
| 25 | if (eth_hdr == NULL) { |
| 26 | rte_pktmbuf_free(mbuf); |
| 27 | return NULL; |
| 28 | } |
| 29 | |
| 30 | /* Ethernet header. */ |
| 31 | memset(eth_hdr->dst_addr.addr_bytes, 0xff, RTE_ETHER_ADDR_LEN); |
| 32 | rte_ether_addr_copy(mac, ð_hdr->src_addr); |
| 33 | eth_hdr->ether_type = RTE_BE16(RTE_ETHER_TYPE_RARP); |
| 34 | |
| 35 | /* RARP header. */ |
| 36 | rarp = (struct rte_arp_hdr *)(eth_hdr + 1); |
| 37 | rarp->arp_hardware = RTE_BE16(RTE_ARP_HRD_ETHER); |
| 38 | rarp->arp_protocol = RTE_BE16(RTE_ETHER_TYPE_IPV4); |
| 39 | rarp->arp_hlen = RTE_ETHER_ADDR_LEN; |
| 40 | rarp->arp_plen = 4; |
| 41 | rarp->arp_opcode = RTE_BE16(RTE_ARP_OP_REVREQUEST); |
| 42 | |
| 43 | rte_ether_addr_copy(mac, &rarp->arp_data.arp_sha); |
| 44 | rte_ether_addr_copy(mac, &rarp->arp_data.arp_tha); |
| 45 | memset(&rarp->arp_data.arp_sip, 0x00, 4); |
| 46 | memset(&rarp->arp_data.arp_tip, 0x00, 4); |
| 47 | |
| 48 | return mbuf; |
| 49 | } |
no test coverage detected