Need help adapting package from CC to 18.06.2

so I was looking around and found an interesting project I wanted to checkout.

The code for this package was written for CC (haven't checked if works there)
I have tried to compile it alone with make package/app/compile works ok, but when I try "make package/app/install", the build fails.
I managed to install it while building the whole system "make world"

Anyway, after that when i try to run the program I get a "Trace/breakpoint trap" message. I can't seem to locate the problem so I ask for your help.

Makefile

include $(TOPDIR)/rules.mk

PKG_NAME:=RssSniffer-SQL
PKG_RELEASE:=1.0

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/RssSniffer-SQL
	SECTION:=utils
	CATEGORY:=Utilities
	TITLE:=RssSniffer-SQL
	DEPENDS:=+libpcap +libmysqlclient +libpthread
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Package/RssSniffer-SQL/install
	$(INSTALL_DIR) $(1)/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/RssSniffer-SQL $(1)/bin/
endef

$(eval $(call BuildPackage,RssSniffer-SQL))

src/Makefile

LDFLAGS+=-L$(STAGING_DIR)/usr/lib/mariadb

RssSniffer-SQL: RssSniffer-SQL.o
	$(CC) $(LDFLAGS) RssSniffer-SQL.o -o RssSniffer-SQL -lpcap -lmysqlclient -lpthread -lz -lm -ldl
RssSniffer-SQL.o: RssSniffer-SQL.c
	$(CC) $(CFLAGS) -c RssSniffer-SQL.c

clean:
	rm *.o RssSniffer-SQL

src/RssSniffer-SQL.c

/*
 * File:   main.c
 * Author: Jiuzhou Wu, Xuan Du
 *
 * Created on 19 June 2015, 19:39
 * Revised on 1 May 2017
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pcap.h>
#include <time.h>
#include <inttypes.h>
#include <ctype.h>
#include <byteswap.h>
#include <netinet/ether.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <mysql/mysql.h>

struct ieee80211_radiotap_header {
    u_int8_t it_version;
    u_int8_t it_pad;
    u_int16_t it_len;
    u_int32_t it_present;
} __attribute__((__packed__));

struct rtapdata {
    uint64_t tsft;
    uint8_t flags;

    uint8_t rate;

    uint16_t c_frequency;
    uint16_t c_flags;
    uint16_t antsignal;

    //uint8_t antenna_index;

    uint16_t rx_flags;

    uint8_t antsignal0;
    uint8_t antenna_index0;

} __attribute__((packed));

MYSQL *con;

void finish_with_error(MYSQL *con);

char* get_mac();

void str_upper(char arr[]);

/* prototype of the packet handler  */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

char dev[] = "mon0"; // Set a device to sniff on

char errbuf[PCAP_ERRBUF_SIZE]; // Error message

struct bpf_program fp; /* The compiled filter expression */

char filter_exp[] = "subtype probe-req"; // filter expression

pcap_t *session_handler; // sniffing session handler

bpf_u_int32 mask; // The netmask of our sniffing device
bpf_u_int32 net; // The IP of our sniffing device

char ap_mac_addr[18];

unsigned long MAC_LENGTH = 17;

int pkt_id = 1; // count the number of packets captured

char *database_host;
char *database_username;
char *database_password;

int main(int argc, char** argv) {

  database_host = argv[1];
  database_username = argv[2];
  database_password = argv[3];

    //Get the MAC address of the AP
    char *temp_arr = get_mac();
    strncpy(ap_mac_addr, temp_arr, 17);
    ap_mac_addr[17] = '\0';
    str_upper(ap_mac_addr);
    free(temp_arr);

    system("iw phy phy2 interface add mon0 type monitor");
    system("ifconfig mon0 up");

    session_handler = pcap_open_live(dev, 65535, 1, 1000, errbuf);

    if (session_handler == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
        return (2);
    }

    printf("Link-layer header type: %d\n", pcap_datalink(session_handler));

    if (pcap_datalink(session_handler) != DLT_IEEE802_11_RADIO) {
        printf("Device: %d\n", pcap_datalink(session_handler));
        fprintf(stderr, "Device %s doesn't provide IEEE 802.11 Radiotap Capture headers\n", dev);
        return (2);
    }

    // Read the network mask and the IP of the sniffing device
    //    if (pcap_lookupnet(dev, &net, &mask, errbuf) == -1) {
    //        fprintf(stderr, "Can't get netmask for device %s\n", dev);
    //        net = 0;
    //        mask = 0;
    //    }

    if (pcap_compile(session_handler, &fp, filter_exp, 0, net) == -1) {
        fprintf(stderr, "Couldn't parse filter %s: %s\n", filter_exp, pcap_geterr(session_handler));
        return (2);
    }

    if (pcap_setfilter(session_handler, &fp) == -1) {
        fprintf(stderr, "Couldn't install filter %s: %s\n", filter_exp, pcap_geterr(session_handler));
        return (2);
    }

    con = mysql_init(NULL);
    if (con == NULL) {
        fprintf(stderr, "%s\n", mysql_error(con));
        exit(1);
    }

    if (mysql_real_connect(con, database_host, database_username,database_password,
            "myips", 0, NULL, 0) == NULL) {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }

    pcap_loop(session_handler, -1, packet_handler, NULL);
    pcap_close(session_handler);
    mysql_close(con);

    return (EXIT_SUCCESS);
}

/* callback function to process a packet when captured */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) {
    (void) (param);

    struct tm ts;
    // get the timestamp from the packet header
    time_t pkthdr_ts;
    pkthdr_ts = header->ts.tv_sec;

    /* convert the timestamp to readable format */
    //time(&pkthdr_ts);
    ts = *localtime(&pkthdr_ts);

    char time_buf[20];
    printf("No. %d  ", pkt_id);

    strftime(time_buf, sizeof (time_buf), "%Y-%m-%d %H:%M:%S", &ts);
    printf("Last Seen: %s Len: %d\n", time_buf, header->caplen);

    struct ieee80211_radiotap_header* radiotap_hdr;

    // Skip the datalink layer header
    //pkt_data+=24;
    radiotap_hdr = (struct ieee80211_radiotap_header*) pkt_data;
    //printf("version: %" PRIu8 "\n", radiotap_hdr->it_version);
    //printf("pad: %" PRIu8 "\n", radiotap_hdr->it_pad);
    //printf("length: %" PRIu16 "\n", __bswap_16(radiotap_hdr->it_len));
    //printf("present: %" PRIu32 "\n", __bswap_32(radiotap_hdr->it_present));

    pkt_data += 16;

    struct rtapdata* rtap_data;
    rtap_data = (struct rtapdata*) pkt_data;

    //printf("MAC timestamp: %" PRIu64 "\n",__bswap_64(rtap_data->tsft));
    //printf("flag:  0x%02x \n", rtap_data->flags);
    printf("rate: %.1f Mb/s\n", (float) rtap_data->rate * 500 / 1000);
    printf("Channel freq: %" PRIu8 "\n", __bswap_16(rtap_data->c_frequency));
    // printf("Channel flags:  0x%04x \n", __bswap_16(rtap_data->c_flags));
    printf("Antenna signal: %d dBm\n", __bswap_16((rtap_data->antsignal)) - 256);
    //printf("Antenna index: %d \n", rtap_data->antenna_index);
    //printf("RX flag: 0x%04x \n", __bswap_16(rtap_data->rx_flags));

    ////
    int rssi = __bswap_16((rtap_data->antsignal)) - 256;
    ////

    printf("RSSI signal: %d dBm\n", (rtap_data->antsignal0) - 256);
    printf("Antenna index: %d \n", rtap_data->antenna_index0);

    pkt_data = pkt_data - 16 + __bswap_16(radiotap_hdr->it_len) + 4;

    struct ether_header* eth_hdr;
    eth_hdr = (struct ether_header*) pkt_data;
    //char des_addr[18];
    char src_addr[18];

    //sprintf(des_addr, "%02x:%02x:%02x:%02x:%02x:%02x", eth_hdr->ether_dhost[0], eth_hdr->ether_dhost[1], eth_hdr->ether_dhost[2], eth_hdr->ether_dhost[3], eth_hdr->ether_dhost[4], eth_hdr->ether_dhost[5]);
    sprintf(src_addr, "%02x:%02x:%02x:%02x:%02x:%02x", eth_hdr->ether_shost[0], eth_hdr->ether_shost[1], eth_hdr->ether_shost[2], eth_hdr->ether_shost[3], eth_hdr->ether_shost[4], eth_hdr->ether_shost[5]);

    //str_upper(des_addr);
    str_upper(src_addr);

        printf("Device_MAC: %s\n", ap_mac_addr);
    printf("Detected_Device: %s\n", src_addr);
    //printf("time: %d\n", pkthdr_ts);


    printf("-------------------\n");

    ////////////////////////MYSQL///////////////////////////

    MYSQL_BIND parameter[6];
    MYSQL_STMT *stmt;
    char query[255] = "INSERT INTO detected_devices (dev_mac_addr,ap_mac_addr,signal_strength,time) VALUES(?,?,?,FROM_UNIXTIME(?)) ON DUPLICATE KEY UPDATE signal_strength=?, time=FROM_UNIXTIME(?)";

    stmt = mysql_stmt_init(con);

    if (!stmt) {
        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
        exit(0);
    }

    if (mysql_stmt_prepare(stmt, query, strlen(query))) {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }
    memset(parameter, 0, sizeof (parameter));

    parameter[0].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter[0].buffer = (char *) src_addr;
    parameter[0].is_null = 0;
    parameter[0].buffer_length = 18;
    parameter[0].length = &MAC_LENGTH;

    parameter[1].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter[1].buffer = (char *) ap_mac_addr;
    parameter[1].is_null = 0;
    parameter[1].buffer_length = 18;
    parameter[1].length = &MAC_LENGTH;

    parameter[2].buffer_type = MYSQL_TYPE_LONG;
    parameter[2].buffer = (char *) &rssi;
    parameter[2].is_null = 0;
    parameter[2].length = 0;


    parameter[3].buffer_type = MYSQL_TYPE_LONG;
    parameter[3].buffer = (char *) &pkthdr_ts;
    parameter[3].is_null = 0;
    parameter[3].length = 0;

    parameter[4] = parameter[2];
    parameter[5] = parameter[3];

    if (mysql_stmt_bind_param(stmt, parameter)) {
        fprintf(stderr, " mysql_stmt_bind_param() failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_execute(stmt)) {
        fprintf(stderr, " mysql_stmt_execute(), 1 failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_close(stmt)) {
        fprintf(stderr, " failed while closing the statement/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    MYSQL_BIND parameter1[1];
    // MYSQL_STMT *stmt;
    char query1[255] = "INSERT INTO statistics (dev_mac_addr) VALUES(?) ON DUPLICATE KEY UPDATE Frequency=Frequency+1";

    stmt = mysql_stmt_init(con);

    if (!stmt) {
        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
        exit(0);
    }

    if (mysql_stmt_prepare(stmt, query1, strlen(query1))) {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }
    memset(parameter1, 0, sizeof (parameter1));

    parameter1[0].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter1[0].buffer = (char *) src_addr;
    parameter1[0].is_null = 0;
    parameter1[0].buffer_length = 18;
    parameter1[0].length = &MAC_LENGTH;

    if (mysql_stmt_bind_param(stmt, parameter1)) {
        fprintf(stderr, " mysql_stmt_bind_param() failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    //mysql_stmt_bind_param(stmt, parameter);

    if (mysql_stmt_execute(stmt)) {
        fprintf(stderr, " mysql_stmt_execute(), 1 failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_close(stmt)) {
        fprintf(stderr, " failed while closing the statement/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

//    if (pkt_id >= 20000) {
//        pcap_breakloop(session_handler);
//    }
    pkt_id++;
}

char* get_mac() {
    struct ifreq ifreq;
    int sock;
    char interface[] = "wlan0";
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("socket ");
        //return 2;
    }
    strcpy(ifreq.ifr_name, interface);
    if (ioctl(sock, SIOCGIFHWADDR, &ifreq) < 0) {
        perror("ioctl ");
        //return 3;
    }

    char *mac_addr = malloc(sizeof (char)*18);

    sprintf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x\n ",
            (unsigned char) ifreq.ifr_hwaddr.sa_data[0],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[1],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[2],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[3],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[4],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[5]);
    close(sock);
    return mac_addr;
}

void str_upper(char arr[]) {
    int i = 0;
    while (arr[i] != '\0') {
        arr[i] = toupper(arr[i]);
        i++;
    }
}

void finish_with_error(MYSQL *con) {
    fprintf(stderr, "%s\n", mysql_error(con));
    mysql_close(con);
    exit(1);
}

My first thoughts, in the absence of the logs, are that the pre-reqs for install may not be present.

Logs of the error (V=s) would provide more insight.

1 Like

for me is not very informative, maybe someone else find something

make package/RssSniffer-SQL/{clean,compile,install} V=s

make[2]: Entering directory '/home/home/workspace/openwrt/scripts/config'
make[2]: Leaving directory '/home/home/workspace/openwrt/scripts/config'
make[1]: Entering directory '/home/home/workspace/openwrt'
make[2]: Entering directory '/home/home/workspace/openwrt/package/RssSniffer-SQL'
rm -rf /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL
rm -f /home/home/workspace/openwrt/bin/packages/mips_24kc/base/RssSniffer-SQL_1.0_mips_24kc.ipk
rm -f /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/stamp/.RssSniffer-SQL_installed
rm -f /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/packages/RssSniffer-SQL.list /home/home/workspace/openwrt/staging_dir/host/packages/RssSniffer-SQL.list
make[2]: Leaving directory '/home/home/workspace/openwrt/package/RssSniffer-SQL'
make[1]: Leaving directory '/home/home/workspace/openwrt'
make[2]: Entering directory '/home/home/workspace/openwrt/scripts/config'
make[2]: Leaving directory '/home/home/workspace/openwrt/scripts/config'
make[1]: Entering directory '/home/home/workspace/openwrt'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/libs/libxml2'
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/libs/libxml2'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/utils/mariadb'
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/utils/mariadb'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/toolchain'
echo "libc" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/toolchain.default.install
echo "libgcc" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/toolchain.default.install
echo "libatomic" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/toolchain.default.install
echo "libstdcpp" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/toolchain.default.install
echo "libpthread" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/toolchain.default.install
echo "librt" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/toolchain.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/toolchain'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/libs/pcre'
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/libs/pcre'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/ncurses'
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/ncurses'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/zlib'
echo "zlib" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/zlib.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/zlib'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/ncurses'
echo "terminfo" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/ncurses.default.install
echo "libncurses" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/ncurses.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/ncurses'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/readline'
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/readline'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/utils/bash'
make[2]: Nothing to be done for 'compile'.
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/utils/bash'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/utils/xz'
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/utils/xz'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/openssl'
echo "libopenssl" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/openssl.default.install
echo "openssl-util" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/openssl.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/openssl'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/libevent2'
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/libevent2'
make[2]: Entering directory '/home/home/workspace/openwrt/package/network/utils/resolveip'
make[2]: Nothing to be done for 'compile'.
make[2]: Leaving directory '/home/home/workspace/openwrt/package/network/utils/resolveip'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/libs/libaio'
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/libs/libaio'
make[2]: Entering directory '/home/home/workspace/openwrt/feeds/packages/utils/mariadb'
echo "libmariadbclient" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/mariadb.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/feeds/packages/utils/mariadb'
make[2]: Entering directory '/home/home/workspace/openwrt/package/libs/libpcap'
echo "libpcap" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/libpcap.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/package/libs/libpcap'
make[2]: Entering directory '/home/home/workspace/openwrt/package/RssSniffer-SQL'
touch /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.prepared_b484cfa524454cb2f9e990cbbf9d9584_6664517399ebbbc92a37c5bb081b5c53_check
mkdir -p /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL
cp -fpR ./src/* /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/
touch /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.prepared_b484cfa524454cb2f9e990cbbf9d9584_6664517399ebbbc92a37c5bb081b5c53
rm -f /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.configured_*
rm -f /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/stamp/.RssSniffer-SQL_installed
(cd /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/./; if [ -x ./configure ]; then find /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ -name config.guess | xargs -r chmod u+w; find /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ -name config.guess | xargs -r -n1 cp --remove-destination /home/home/workspace/openwrt/scripts/config.guess; find /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ -name config.sub | xargs -r chmod u+w; find /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ -name config.sub | xargs -r -n1 cp --remove-destination /home/home/workspace/openwrt/scripts/config.sub; AR="mips-openwrt-linux-musl-gcc-ar" AS="mips-openwrt-linux-musl-gcc -c -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" LD=mips-openwrt-linux-musl-ld NM="mips-openwrt-linux-musl-gcc-nm" CC="mips-openwrt-linux-musl-gcc" GCC="mips-openwrt-linux-musl-gcc" CXX="mips-openwrt-linux-musl-g++" RANLIB="mips-openwrt-linux-musl-gcc-ranlib" STRIP=mips-openwrt-linux-musl-strip OBJCOPY=mips-openwrt-linux-musl-objcopy OBJDUMP=mips-openwrt-linux-musl-objdump SIZE=mips-openwrt-linux-musl-size CFLAGS="-Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro " CXXFLAGS="-Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro " CPPFLAGS="-I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/fortify -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include " LDFLAGS="-L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/lib -L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/lib -L/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/lib -L/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/lib -znow -zrelro "   ./configure --target=mips-openwrt-linux --host=mips-openwrt-linux --build=x86_64-pc-linux-gnu --program-prefix="" --program-suffix="" --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls  ; fi; )
touch /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.configured_68b329da9893e34099c7d8ad5cb9c940
rm -f /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.built
touch /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.built_check
CFLAGS="-Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro  -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/fortify -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include " CXXFLAGS="-Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro  -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/fortify -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include " LDFLAGS="-L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/lib -L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/lib -L/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/lib -L/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/lib -znow -zrelro " make -j1 -C /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/. AR="mips-openwrt-linux-musl-gcc-ar" AS="mips-openwrt-linux-musl-gcc -c -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" LD=mips-openwrt-linux-musl-ld NM="mips-openwrt-linux-musl-gcc-nm" CC="mips-openwrt-linux-musl-gcc" GCC="mips-openwrt-linux-musl-gcc" CXX="mips-openwrt-linux-musl-g++" RANLIB="mips-openwrt-linux-musl-gcc-ranlib" STRIP=mips-openwrt-linux-musl-strip OBJCOPY=mips-openwrt-linux-musl-objcopy OBJDUMP=mips-openwrt-linux-musl-objdump SIZE=mips-openwrt-linux-musl-size CROSS="mips-openwrt-linux-musl-" ARCH="mips" ;
make[3]: Entering directory '/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL'
mips-openwrt-linux-musl-gcc -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL:RssSniffer-SQL -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro  -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/include -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/fortify -I/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include  -c RssSniffer-SQL.c
mips-openwrt-linux-musl-gcc -L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/lib -L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/lib -L/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/lib -L/home/home/workspace/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/lib -znow -zrelro  -L/home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/mariadb RssSniffer-SQL.o -o RssSniffer-SQL -lpcap -lmysqlclient -lpthread -lz -lm -ldl
make[3]: Leaving directory '/home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL'
touch /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.built
rm -rf /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL.installed /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL
mkdir -p /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL
install -d -m0755 /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL/bin
install -m0755 /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/RssSniffer-SQL /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL/bin/
touch /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL.installed
mkdir -p /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/root-ar71xx/stamp
SHELL= flock /home/home/workspace/openwrt/tmp/.root-copy.flock -c 'cp -fpR /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/.pkgdir/RssSniffer-SQL/. /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/root-ar71xx/'
touch /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/root-ar71xx/stamp/.RssSniffer-SQL_installed
mkdir -p /home/home/workspace/openwrt/bin/targets/ar71xx/nand/packages /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL/CONTROL /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo
install -d -m0755 /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL/bin
install -m0755 /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/RssSniffer-SQL /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL/bin/
find /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf
export CROSS="mips-openwrt-linux-musl-"  NO_RENAME=1 ; NM="mips-openwrt-linux-musl-nm" STRIP="/home/home/workspace/openwrt/staging_dir/host/bin/sstrip" STRIP_KMOD="/home/home/workspace/openwrt/scripts/strip-kmod.sh" PATCHELF="/home/home/workspace/openwrt/staging_dir/host/bin/patchelf" /home/home/workspace/openwrt/scripts/rstrip.sh /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL
rstrip.sh: /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL/bin/RssSniffer-SQL: executable
(cd /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL/CONTROL; ( echo "$CONTROL"; printf "Description: "; echo "$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; ) > control; chmod 644 control; ( echo "#!/bin/sh"; echo "[ \"\${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; echo "[ -x "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_postinst \$0 \$@"; ) > postinst; ( echo "#!/bin/sh"; echo "[ -x "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_prerm \$0 \$@"; ) > prerm; chmod 0755 postinst prerm;  )
install -d -m0755 /home/home/workspace/openwrt/bin/packages/mips_24kc/base
/home/home/workspace/openwrt/scripts/ipkg-build -c -o 0 -g 0 /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL /home/home/workspace/openwrt/bin/packages/mips_24kc/base
Packaged contents of /home/home/workspace/openwrt/build_dir/target-mips_24kc_musl/RssSniffer-SQL/ipkg-mips_24kc/RssSniffer-SQL into /home/home/workspace/openwrt/bin/packages/mips_24kc/base/RssSniffer-SQL_1.0_mips_24kc.ipk
echo "RssSniffer-SQL" >> /home/home/workspace/openwrt/staging_dir/target-mips_24kc_musl/pkginfo/RssSniffer-SQL.default.install
make[2]: Leaving directory '/home/home/workspace/openwrt/package/RssSniffer-SQL'
make[1]: Leaving directory '/home/home/workspace/openwrt'
make[2]: Entering directory '/home/home/workspace/openwrt/scripts/config'
make[2]: Leaving directory '/home/home/workspace/openwrt/scripts/config'
make[1]: Entering directory '/home/home/workspace/openwrt'
make[1]: Leaving directory '/home/home/workspace/openwrt'
/home/home/workspace/openwrt/include/toplevel.mk:216: recipe for target 'package/RssSniffer-SQL/install' failed

I have the same problem. Did you by any chance find a solution to this problem? i would really appreciate anyone's help on this exact issue.
thank you in advance

hey xrenos,

I have solved the problem at that time, sorry I didn't post the solution.
If I remember correctly the problem occured in print mac address command

anyway here is a revision of RssSniffer-SQL.c that should work properly ( it's been some time time that I haven't worked on it so I don't remember if this is the proper working revision)

btw it is edited for having a monitor interface from wireless config always on, so I have disabled some commands

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pcap.h>
#include <time.h>
#include <inttypes.h>
#include <byteswap.h>
#include <netinet/ether.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <mysql/mysql.h>
#include <unistd.h>
#include <ctype.h>

struct ieee80211_radiotap_header {
    u_int8_t it_version;
    u_int8_t it_pad;
    u_int16_t it_len;
    u_int32_t it_present;
} __attribute__((__packed__));

struct rtapdata {
    uint64_t tsft;
    uint8_t flags;

    uint8_t rate;

    uint16_t c_frequency;
    uint16_t c_flags;
    uint16_t antsignal;

    //uint8_t antenna_index;

    uint16_t rx_flags;

    uint8_t antsignal0;
    uint8_t antenna_index0;

} __attribute__((packed));

MYSQL *con;

void finish_with_error(MYSQL *con);

char* get_mac();

void str_upper(char arr[]);

/* prototype of the packet handler  */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

char dev[] = "mon0"; // Set a device to sniff on

char errbuf[PCAP_ERRBUF_SIZE]; // Error message

struct bpf_program fp; /* The compiled filter expression */

char filter_exp[] = "subtype probe-req"; // filter expression

pcap_t *session_handler; // sniffing session handler

bpf_u_int32 mask; // The netmask of our sniffing device
bpf_u_int32 net; // The IP of our sniffing device

char ap_mac_addr[18];

unsigned long MAC_LENGTH = 17;

int pkt_id = 1; // count the number of packets captured

char *database_host;
char *database_username;
char *database_password;

int main(int argc, char** argv) {

  database_host = argv[1];
  database_username = argv[2];
  database_password = argv[3];

    //Get the MAC address of the AP
    char *temp_arr = get_mac();
    strncpy(ap_mac_addr, temp_arr, 17);
    ap_mac_addr[17] = '\0';
    str_upper(ap_mac_addr);
    free(temp_arr);

    // system("iw phy phy0 interface add mon0 type monitor");
    // system("ifconfig mon0 up");

    session_handler = pcap_open_live(dev, 65535, 1, 1000, errbuf);

    if (session_handler == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
        return (2);
    }

    printf("Link-layer header type: %d\n", pcap_datalink(session_handler));

    if (pcap_datalink(session_handler) != DLT_IEEE802_11_RADIO) {
        printf("Device: %d\n", pcap_datalink(session_handler));
        fprintf(stderr, "Device %s doesn't provide IEEE 802.11 Radiotap Capture headers\n", dev);
        return (2);
    }

    // Read the network mask and the IP of the sniffing device
    //    if (pcap_lookupnet(dev, &net, &mask, errbuf) == -1) {
    //        fprintf(stderr, "Can't get netmask for device %s\n", dev);
    //        net = 0;
    //        mask = 0;
    //    }

    if (pcap_compile(session_handler, &fp, filter_exp, 0, net) == -1) {
        fprintf(stderr, "Couldn't parse filter %s: %s\n", filter_exp, pcap_geterr(session_handler));
        return (2);
    }

    if (pcap_setfilter(session_handler, &fp) == -1) {
        fprintf(stderr, "Couldn't install filter %s: %s\n", filter_exp, pcap_geterr(session_handler));
        return (2);
    }

    con = mysql_init(NULL);
    if (con == NULL) {
        fprintf(stderr, "%s\n", mysql_error(con));
        exit(1);
    }

    if (mysql_real_connect(con, database_host, database_username,database_password,
            "myips", 0, NULL, 0) == NULL) {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }

    pcap_loop(session_handler, -1, packet_handler, NULL);
    pcap_close(session_handler);
    mysql_close(con);

    return (EXIT_SUCCESS);
}

/* callback function to process a packet when captured */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) {
    (void) (param);

    struct tm ts;
    // get the timestamp from the packet header
    time_t pkthdr_ts;
    pkthdr_ts = header->ts.tv_sec;

    /* convert the timestamp to readable format */
    //time(&pkthdr_ts);
    ts = *localtime(&pkthdr_ts);

    char time_buf[20];
    printf("No. %d  ", pkt_id);

    strftime(time_buf, sizeof (time_buf), "%Y-%m-%d %H:%M:%S", &ts);
    printf("Last Seen: %s Len: %d\n", time_buf, header->caplen);

    struct ieee80211_radiotap_header* radiotap_hdr;

    // Skip the datalink layer header
    //pkt_data+=24;
    radiotap_hdr = (struct ieee80211_radiotap_header*) pkt_data;
    //printf("version: %" PRIu8 "\n", radiotap_hdr->it_version);
    //printf("pad: %" PRIu8 "\n", radiotap_hdr->it_pad);
    //printf("length: %" PRIu16 "\n", __bswap_16(radiotap_hdr->it_len));
    //printf("present: %" PRIu32 "\n", __bswap_32(radiotap_hdr->it_present));

    pkt_data += 16;

    struct rtapdata* rtap_data;
    rtap_data = (struct rtapdata*) pkt_data;

    //printf("MAC timestamp: %" PRIu64 "\n",__bswap_64(rtap_data->tsft));
    //printf("flag:  0x%02x \n", rtap_data->flags);
    printf("rate: %.1f Mb/s\n", (float) rtap_data->rate * 500 / 1000);
    printf("Channel freq: %" PRIu8 "\n", __bswap_16(rtap_data->c_frequency));
    // printf("Channel flags:  0x%04x \n", __bswap_16(rtap_data->c_flags));
    printf("Antenna signal: %d dBm\n", __bswap_16((rtap_data->antsignal)) - 256);
    //printf("Antenna index: %d \n", rtap_data->antenna_index);
    //printf("RX flag: 0x%04x \n", __bswap_16(rtap_data->rx_flags));

    ////
    int rssi = __bswap_16((rtap_data->antsignal)) - 256;
    ////

    printf("RSSI signal: %d dBm\n", (rtap_data->antsignal0) - 256);
    printf("Antenna index: %d \n", rtap_data->antenna_index0);

    pkt_data = pkt_data - 16 + __bswap_16(radiotap_hdr->it_len) + 4;

    struct ether_header* eth_hdr;
    eth_hdr = (struct ether_header*) pkt_data;
    //char des_addr[18];
    char src_addr[18];

    //sprintf(des_addr, "%02x:%02x:%02x:%02x:%02x:%02x", eth_hdr->ether_dhost[0], eth_hdr->ether_dhost[1], eth_hdr->ether_dhost[2], eth_hdr->ether_dhost[3], eth_hdr->ether_dhost[4], eth_hdr->ether_dhost[5]);
    sprintf(src_addr, "%02x:%02x:%02x:%02x:%02x:%02x", eth_hdr->ether_shost[0], eth_hdr->ether_shost[1], eth_hdr->ether_shost[2], eth_hdr->ether_shost[3], eth_hdr->ether_shost[4], eth_hdr->ether_shost[5]);

    //str_upper(des_addr);
    str_upper(src_addr);

        printf("Device_MAC: %s\n", ap_mac_addr);
    printf("Detected_Device: %s\n", src_addr);
    //printf("time: %d\n", pkthdr_ts);


    printf("-------------------\n");

    ////////////////////////MYSQL///////////////////////////

    MYSQL_BIND parameter[6];
    MYSQL_STMT *stmt;
    char query[255] = "INSERT INTO detected_devices (dev_mac_addr,ap_mac_addr,signal_strength,time) VALUES(?,?,?,FROM_UNIXTIME(?)) ON DUPLICATE KEY UPDATE signal_strength=?, time=FROM_UNIXTIME(?)";

    stmt = mysql_stmt_init(con);

    if (!stmt) {
        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
        exit(0);
    }

    if (mysql_stmt_prepare(stmt, query, strlen(query))) {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }
    memset(parameter, 0, sizeof (parameter));

    parameter[0].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter[0].buffer = (char *) src_addr;
    parameter[0].is_null = 0;
    parameter[0].buffer_length = 18;
    parameter[0].length = &MAC_LENGTH;

    parameter[1].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter[1].buffer = (char *) ap_mac_addr;
    parameter[1].is_null = 0;
    parameter[1].buffer_length = 18;
    parameter[1].length = &MAC_LENGTH;

    parameter[2].buffer_type = MYSQL_TYPE_LONG;
    parameter[2].buffer = (char *) &rssi;
    parameter[2].is_null = 0;
    parameter[2].length = 0;


    parameter[3].buffer_type = MYSQL_TYPE_LONG;
    parameter[3].buffer = (char *) &pkthdr_ts;
    parameter[3].is_null = 0;
    parameter[3].length = 0;

    parameter[4] = parameter[2];
    parameter[5] = parameter[3];

    if (mysql_stmt_bind_param(stmt, parameter)) {
        fprintf(stderr, " mysql_stmt_bind_param() failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_execute(stmt)) {
        fprintf(stderr, " mysql_stmt_execute(), 1 failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_close(stmt)) {
        fprintf(stderr, " failed while closing the statement/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    MYSQL_BIND parameter1[1];
    // MYSQL_STMT *stmt;
    char query1[255] = "INSERT INTO statistics (dev_mac_addr) VALUES(?) ON DUPLICATE KEY UPDATE Frequency=Frequency+1";

    stmt = mysql_stmt_init(con);

    if (!stmt) {
        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
        exit(0);
    }

    if (mysql_stmt_prepare(stmt, query1, strlen(query1))) {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }
    memset(parameter1, 0, sizeof (parameter1));

    parameter1[0].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter1[0].buffer = (char *) src_addr;
    parameter1[0].is_null = 0;
    parameter1[0].buffer_length = 18;
    parameter1[0].length = &MAC_LENGTH;

    if (mysql_stmt_bind_param(stmt, parameter1)) {
        fprintf(stderr, " mysql_stmt_bind_param() failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    //mysql_stmt_bind_param(stmt, parameter);

    if (mysql_stmt_execute(stmt)) {
        fprintf(stderr, " mysql_stmt_execute(), 1 failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_close(stmt)) {
        fprintf(stderr, " failed while closing the statement/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

//    if (pkt_id >= 20000) {
//        pcap_breakloop(session_handler);
//    }
    pkt_id++;
}

char* get_mac() {
    struct ifreq ifreq;
    int sock;
    char interface[] = "mon0";
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("socket ");
        //return 2;
    }
    strcpy(ifreq.ifr_name, interface);
    if (ioctl(sock, SIOCGIFHWADDR, &ifreq) < 0) {
        perror("ioctl ");
        //return 3;
    }

    char *mac_addr = malloc(sizeof (char)*18);

    sprintf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x\n ",
            (unsigned char) ifreq.ifr_hwaddr.sa_data[0],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[1],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[2],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[3],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[4],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[5]);
    close(sock);
    return mac_addr;
}

void str_upper(char arr[]) {
    int i = 0;
    while (arr[i] != '\0') {
        arr[i] = toupper(arr[i]);
        i++;
    }
}

void finish_with_error(MYSQL *con) {
    fprintf(stderr, "%s\n", mysql_error(con));
    mysql_close(con);
    exit(1);
}

Thank you for you response! I have compiled the package successfully with your code without having to use the "make world" command. This time i get an error when i try to run it:
**ioctl: no such device **
Trace/breakpoint trap
Do i have to make other changes?
thank you again for your help.

This must be because of the monitor interface does not exist.

go in wireless config of openwrt and make a monitor interface called "mon0" and it should work

config wifi-iface
        option mode 'monitor'
        option device 'radio0'
        option ifname 'mon0'

let me know if this works for you, else I need to find the most recent revision I have.

i tried this

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option ssid 'OpenWrt'
	option mode 'monitor'
	option encryption 'none'
	option ifname 'mon0

but i still get the same error.
Thank you again for your help.

no need to bridge monitor iface with lan network and there is no ssid in monitor mode.
so just remove these lines

	option network 'lan'
	option ssid 'OpenWrt'
	option encryption 'none'

I found the most recent revision I have edited
I remember i had some problems with pcap.h so if you get an error try editing the include line


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pcap/pcap.h>
#include <time.h>
#include <inttypes.h>
#include <ctype.h>
#include <byteswap.h>
#include <netinet/ether.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <mysql/mysql.h>

struct ieee80211_radiotap_header {
    u_int8_t it_version;
    u_int8_t it_pad;
    u_int16_t it_len;
    u_int32_t it_present;
} __attribute__((__packed__));

struct rtapdata {
    uint64_t tsft;
    uint8_t flags;

    uint8_t rate;

    uint16_t c_frequency;
    uint16_t c_flags;
    uint16_t antsignal;

    //uint8_t antenna_index;

    uint16_t rx_flags;

    uint8_t antsignal0;
    uint8_t antenna_index0;

} __attribute__((packed));

MYSQL *con;

void finish_with_error(MYSQL *con);

char* get_mac();

void str_upper(char arr[]);

/* prototype of the packet handler  */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

char dev[] = "mon0"; // Set a device to sniff on

char errbuf[PCAP_ERRBUF_SIZE]; // Error message

struct bpf_program fp; /* The compiled filter expression */

char filter_exp[] = "subtype probe-req"; // filter expression

pcap_t *session_handler; // sniffing session handler

bpf_u_int32 mask; // The netmask of our sniffing device
bpf_u_int32 net; // The IP of our sniffing device

char ap_mac_addr[18];

unsigned long MAC_LENGTH = 17;

int pkt_id = 1; // count the number of packets captured

char *database_host;
char *database_username;
char *database_password;

int main(int argc, char** argv) {

    database_host = argv[1];
    database_username = argv[2];
    database_password = argv[3];

    //Get the MAC address of the AP
    printf("Get MAC Address\n");
    char *temp_arr = get_mac();
    strncpy(ap_mac_addr, temp_arr, 17);
    ap_mac_addr[17] = '\0';
    str_upper(ap_mac_addr);
    free(temp_arr);

    session_handler = pcap_open_live(dev, 65535, 1, 1000, errbuf);

    if (session_handler == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
        return (2);
    }

    printf("Link-layer header type: %d\n", pcap_datalink(session_handler));

    if (pcap_datalink(session_handler) != DLT_IEEE802_11_RADIO) {
        printf("Device: %d\n", pcap_datalink(session_handler));
        fprintf(stderr, "Device %s doesn't provide IEEE 802.11 Radiotap Capture headers\n", dev);
        return (2);
    }

    // Read the network mask and the IP of the sniffing device
    //    if (pcap_lookupnet(dev, &net, &mask, errbuf) == -1) {
    //        fprintf(stderr, "Can't get netmask for device %s\n", dev);
    //        net = 0;
    //        mask = 0;
    //    }

    if (pcap_compile(session_handler, &fp, filter_exp, 0, net) == -1) {
        fprintf(stderr, "Couldn't parse filter %s: %s\n", filter_exp, pcap_geterr(session_handler));
        return (2);
    }

    if (pcap_setfilter(session_handler, &fp) == -1) {
        fprintf(stderr, "Couldn't install filter %s: %s\n", filter_exp, pcap_geterr(session_handler));
        return (2);
    }

    con = mysql_init(NULL);
    if (con == NULL) {
        fprintf(stderr, "%s\n", mysql_error(con));
        exit(1);
    }

    if (mysql_real_connect(con, database_host, database_username, database_password,
            "myips", 0, NULL, 0) == NULL) {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }

    pcap_loop(session_handler, -1, packet_handler, NULL);
    pcap_close(session_handler);
    mysql_close(con);
    
    exit(EXIT_SUCCESS);
    return 0;
}

/* callback function to process a packet when captured */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) {
    (void) (param);

    struct tm ts;
    // get the timestamp from the packet header
    time_t pkthdr_ts;
    pkthdr_ts = header->ts.tv_sec;

    /* convert the timestamp to readable format */
    //time(&pkthdr_ts);
    ts = *localtime(&pkthdr_ts);

    char time_buf[20];
    printf("No. %d  ", pkt_id);

    strftime(time_buf, sizeof (time_buf), "%Y-%m-%d %H:%M:%S", &ts);
    printf("Last Seen: %s Len: %d\n", time_buf, header->caplen);

    struct ieee80211_radiotap_header* radiotap_hdr;

    // Skip the datalink layer header
    //pkt_data+=24;
    radiotap_hdr = (struct ieee80211_radiotap_header*) pkt_data;
    //printf("version: %" PRIu8 "\n", radiotap_hdr->it_version);
    //printf("pad: %" PRIu8 "\n", radiotap_hdr->it_pad);
    //printf("length: %" PRIu16 "\n", __bswap_16(radiotap_hdr->it_len));
    //printf("present: %" PRIu32 "\n", __bswap_32(radiotap_hdr->it_present));

    pkt_data += 16;

    struct rtapdata* rtap_data;
    rtap_data = (struct rtapdata*) pkt_data;

    //printf("MAC timestamp: %" PRIu64 "\n",__bswap_64(rtap_data->tsft));
    //printf("flag:  0x%02x \n", rtap_data->flags);
    printf("rate: %.1f Mb/s\n", (float) rtap_data->rate * 500 / 1000);
    printf("Channel freq: %" PRIu8 "\n", __bswap_16(rtap_data->c_frequency));
    // printf("Channel flags:  0x%04x \n", __bswap_16(rtap_data->c_flags));
    printf("Antenna signal: %d dBm\n", __bswap_16((rtap_data->antsignal)) - 256);
    //printf("Antenna index: %d \n", rtap_data->antenna_index);
    //printf("RX flag: 0x%04x \n", __bswap_16(rtap_data->rx_flags));

    ////
    int rssi = __bswap_16((rtap_data->antsignal)) - 256;
    ////

    printf("RSSI signal: %d dBm\n", (rtap_data->antsignal0) - 256);
    printf("Antenna index: %d \n", rtap_data->antenna_index0);

    pkt_data = pkt_data - 16 + __bswap_16(radiotap_hdr->it_len) + 4;

    struct ether_header* eth_hdr;
    eth_hdr = (struct ether_header*) pkt_data;
    //char des_addr[18];
    char src_addr[18];

    //sprintf(des_addr, "%02x:%02x:%02x:%02x:%02x:%02x", eth_hdr->ether_dhost[0], eth_hdr->ether_dhost[1], eth_hdr->ether_dhost[2], eth_hdr->ether_dhost[3], eth_hdr->ether_dhost[4], eth_hdr->ether_dhost[5]);
    sprintf(src_addr, "%02x:%02x:%02x:%02x:%02x:%02x", eth_hdr->ether_shost[0], eth_hdr->ether_shost[1], eth_hdr->ether_shost[2], eth_hdr->ether_shost[3], eth_hdr->ether_shost[4], eth_hdr->ether_shost[5]);

    //str_upper(des_addr);
    str_upper(src_addr);

        printf("Device_MAC: %s\n", ap_mac_addr);
    printf("Detected_Device: %s\n", src_addr);
    //printf("time: %d\n", pkthdr_ts);


    printf("-------------------\n");

    ////////////////////////MYSQL///////////////////////////

    printf("MySQL");
    MYSQL_BIND parameter[6];
    MYSQL_STMT *stmt;
    char query[255] = "INSERT INTO detected_devices (dev_mac_addr,ap_mac_addr,signal_strength,time) VALUES(?,?,?,FROM_UNIXTIME(?)) ON DUPLICATE KEY UPDATE signal_strength=?, time=FROM_UNIXTIME(?)";

    stmt = mysql_stmt_init(con);

    if (!stmt) {
        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
        exit(0);
    }

    if (mysql_stmt_prepare(stmt, query, strlen(query))) {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }
    memset(parameter, 0, sizeof (parameter));

    parameter[0].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter[0].buffer = (char *) src_addr;
    parameter[0].is_null = 0;
    parameter[0].buffer_length = 18;
    parameter[0].length = &MAC_LENGTH;

    parameter[1].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter[1].buffer = (char *) ap_mac_addr;
    parameter[1].is_null = 0;
    parameter[1].buffer_length = 18;
    parameter[1].length = &MAC_LENGTH;

    parameter[2].buffer_type = MYSQL_TYPE_LONG;
    parameter[2].buffer = (char *) &rssi;
    parameter[2].is_null = 0;
    parameter[2].length = 0;


    parameter[3].buffer_type = MYSQL_TYPE_LONG;
    parameter[3].buffer = (char *) &pkthdr_ts;
    parameter[3].is_null = 0;
    parameter[3].length = 0;

    parameter[4] = parameter[2];
    parameter[5] = parameter[3];

    if (mysql_stmt_bind_param(stmt, parameter)) {
        fprintf(stderr, " mysql_stmt_bind_param() failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_execute(stmt)) {
        fprintf(stderr, " mysql_stmt_execute(), 1 failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_close(stmt)) {
        fprintf(stderr, " failed while closing the statement/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    printf("Send to MySQL");
    MYSQL_BIND parameter1[1];
    // MYSQL_STMT *stmt;
    char query1[255] = "INSERT INTO statistics (dev_mac_addr) VALUES(?) ON DUPLICATE KEY UPDATE Frequency=Frequency+1";

    stmt = mysql_stmt_init(con);

    if (!stmt) {
        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
        exit(0);
    }

    if (mysql_stmt_prepare(stmt, query1, strlen(query1))) {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }
    memset(parameter1, 0, sizeof (parameter1));

    parameter1[0].buffer_type = MYSQL_TYPE_VAR_STRING;
    parameter1[0].buffer = (char *) src_addr;
    parameter1[0].is_null = 0;
    parameter1[0].buffer_length = 18;
    parameter1[0].length = &MAC_LENGTH;

    if (mysql_stmt_bind_param(stmt, parameter1)) {
        fprintf(stderr, " mysql_stmt_bind_param() failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    //mysql_stmt_bind_param(stmt, parameter);

    if (mysql_stmt_execute(stmt)) {
        fprintf(stderr, " mysql_stmt_execute(), 1 failed/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

    if (mysql_stmt_close(stmt)) {
        fprintf(stderr, " failed while closing the statement/n");
        fprintf(stderr, " %s/n", mysql_stmt_error(stmt));
        exit(0);
    }

//    if (pkt_id >= 20000) {
//        pcap_breakloop(session_handler);
//    }
    pkt_id++;
}

char* get_mac() {
    int sock = socket(PF_INET, SOCK_DGRAM, 0);
    struct ifreq ifreq;
    int i = 0;
    char interface[] = "mon0";
    memset(&ifreq, 0, sizeof(ifreq));
    strcpy(ifreq.ifr_name, interface);
    if (ioctl(sock, SIOCGIFHWADDR, &ifreq) < 0) {
        perror("ioctl");
        exit(EXIT_FAILURE);
    }

    char *mac_addr = (char*)malloc(256);
    sprintf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x\n ",
            (unsigned char) ifreq.ifr_hwaddr.sa_data[0],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[1],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[2],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[3],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[4],
            (unsigned char) ifreq.ifr_hwaddr.sa_data[5]);
    
    close(sock);
    return mac_addr;
}

void str_upper(char arr[]) {
    printf("str_upper");
    int i = 0;
    while (arr[i] != '\0') {
        arr[i] = toupper(arr[i]);
        i++;
    }
}

here is the github for more information on the rest, make sure you are doing correct