[dpdk-users] Unable to transmit custom built packet in dpdk
Andriy Berestovskyy
aber at semihalf.com
Mon Oct 17 12:48:53 CEST 2016
Hey,
In rte_eth_rx_burst() you are passing just a pointer to rte_mbuf,
while the functions expects a pointer to an array.
Andriy
On Sun, Oct 16, 2016 at 5:19 PM, Upendra Pathrikar
<uspathrikar at gmail.com> wrote:
> hi,
>
> I am trying to build packet generator like application in dpdk. I have
> custom built packet as unsigned char array(used to store hex values) I have
> allocated mbuf and extract unsigned char pointer for data field from mbuf
> and now I am filling the mbuf with unsigned char array packet. Then trying
> to transmit the packet using rte_eth_tx_burst function. It reteurns as the
> packet is sent but I don't receive the same packet or any garbage packet
> either on wireshark or using custom application with rte_eth_rx_burst.
>
> I am working on ubuntu 14.04 with kernel 3.13
> I am using Intel Gigabit ET dual port server adapter (82576) with igb_uio
> driver binding
> one port to transmit packet and other to receive packet
>
> the custom packet defined is arp packet without crc i.e 60bytes
> application should not exit unless it receives packet.
> But it is exiting at first execution of rte_eth_rx_burst() without
> indicating any error or executing further. I am clueless now.
>
> Your help will be appreciated
>
> static int txmt_pkts(void)
> {
> uint8_t port_id;
> struct rte_mbuf *mpkt, *rxpkt;
> unsigned char
> packet[]="ffffffffffff3417ebc76473080600010800060400013417ebc764730ad042700000000000000ad04201000000000000000000000000000000000000\0";
> unsigned char pkt[strlen(packet)/2];
> int ret,i;
> int nb_tx, nb_rx;
> unsigned char *ptr;
>
> /* Function convert char array into cooresponding actual hex values*/
> ret = hexstring2hexchar(packet,pkt,strlen(packet));
> if(ret < 0)
> return -3;
> /* Allocate mbuf to add packet data */
> mpkt = rte_pktmbuf_alloc(mbuf_pool);
> if(mpkt == NULL)
> return -2;
> rte_mbuf_sanity_check(mpkt,1);
> ptr = rte_pktmbuf_mtod(mpkt,unsigned char *);
> for(i = 0; i< (strlen(packet)/2); i++){
> *(ptr+i) = *(pkt+i);
> mpkt->data_len++;
> mpkt->pkt_len++;
> }
> rte_mbuf_sanity_check(mpkt,1);
> nb_tx = rte_eth_tx_burst(1, 0, &mpkt, 1);
> printf("\npackets sent till this time - %d",nb_tx);
>
> while(1){
> nb_rx = rte_eth_rx_burst(0,0,rxpkt,1);
> if(nb_rx != 0){
> printf("\nFinally recived a packet - %d\n",nb_rx);
> break;
> }
> }
> printf("\nEnd of transmission\n");
> return 0;
> }
>
>
>
> Thanks...
>
> --
>
>
>
>
>
>
> *Regards,Upendra Sunil PathrikarResearch ScholarBharti School of Telecom
> Technology and Management,Indian Institute of Technology, Delhi.*
--
Andriy Berestovskyy
More information about the users
mailing list