appneta / tcpreplay

Pcap editing and replay tools for *NIX and Windows - Users please download source from
http://tcpreplay.appneta.com/wiki/installation.html#downloads
1.16k stars 268 forks source link

[Bug] Linker error in txring.c using Android NDK version 23 #731

Open NghiaNT1989 opened 2 years ago

NghiaNT1989 commented 2 years ago

Describe the bug A clear and concise description of what the bug is. Linker error in txring.c using Android NDK version 23

ld: error: undefined symbol: txring_put
>>> referenced by sendpacket.c:303
>>>               sendpacket.o:(sendpacket) in archive ./common/libcommon.a

ld: error: undefined symbol: txring_init
>>> referenced by sendpacket.c:990
>>>               sendpacket.o:(sendpacket_open) in archive ./common/libcommon.a

To Reproduce Steps to reproduce the behavior:

  1. after configuration, we will have
Supported Packet Injection Methods (*):
Linux TX_RING:              yes
Linux PF_PACKET:            yes
  1. run : make

Expected behavior Make should be finished without any error

Screenshots

System (please complete the following information):

Additional context The macro HAVE_TX_RING is defined in config.h

/* Do we have Linux TX_RING socket support? */
#define HAVE_TX_RING 1

in header file : txring.h, we include config.h then check ifdef HAVE_TX_RING, it's OK, definition of HAVE_TX_RING is now available in txring.h.

#include "config.h"
#include "defines.h"

#ifdef HAVE_TX_RING

However, in txring.c, check ifdef HAVE_TX_RING is added firstly but it's not yet defined.

#ifdef HAVE_TX_RING

#include "err.h"
#include "utils.h"
#include "txring.h"
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#include <errno.h>

we need to move ifdef HAVE_TX_RING after header inclusion, like this

#include "err.h"
#include "utils.h"
#include "txring.h"
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#include <errno.h>

#ifdef HAVE_TX_RING
fklassen commented 1 year ago

I had a quick look and it seems obvious that HAVE_TX_RING has not been able to compile for a very long time. If someone wants to fix it, I'll put it in an enhancement release. I have no way of testing it in my test jig.