add copy packet_info that holds packet_parse() result

Instead of discarding invalid data, copy_packet_info() copies
buffer->user_data with fixing the pointer address to new one.
reset_buffer() should reset associated user_data
always reset_buffer() before reusing device recieve buffer.

buffers fetched from device->recv_queue were not reset.