I find it helpful to expand the packet display and add offset labels to them:
81 00 08 73 08 00 45 00 00 2a 00 fc 00 00 3e 11 bf 42 ac 15 05 69 0a 5f 00 aa 08 68
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
08 00 45 00 00 2a 00 fc 00 00 3e 11 bf 42 ac 15 00 00 0a 5f 00 aa 08 68 08 68 00 16
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
I see nothing in the code that would explain why two bytes of zeros are dropped into that sequence of bytes. It looks correct except for those two bytes. I would watch the data in the debugger and make sure that is what it looks like before and after the memcpy call. Look closely at the definition of the data packet structure and note where the data_len and pkt_len members are. It could be that the subtraction operation is clearing those bytes. Also verify what rte_pktmbuf_mtod does. If you just can't sort it out then you could save the address in a temporary variable before the memcpy call for use later.