Ground-Zerro / HydraRoute Public
Code Issues Pull requests Actions Releases View on GitHub ↗
990 B c
#ifndef NFQ_CAPTURE_H
#define NFQ_CAPTURE_H

#include <stdint.h>
#include <stddef.h>

#define NFQ_RECV_BUF_SIZE  (128 * 1024)
#define NFQ_QUEUE_MAXLEN   1024
#define NFQ_COPY_RANGE     0xFFFF

typedef void (*nfq_packet_cb)(const uint8_t *ip_pkt, int len,
                              uint32_t mark, uint32_t ifindex_in,
                              uint32_t ifindex_out, void *user);

typedef struct {
    int            fd;
    uint16_t       qnum;
    uint32_t       seq;
    uint32_t       portid;
    nfq_packet_cb  callback;
    void          *user_data;
    uint64_t       stat_recv;
    uint64_t       stat_pass;
    uint64_t       stat_err;
    uint8_t        recv_buf[NFQ_RECV_BUF_SIZE];
} nfq_capture_t;

int  nfq_capture_init   (nfq_capture_t *cap, uint16_t qnum,
                         nfq_packet_cb cb, void *user_data);
int  nfq_capture_fd     (const nfq_capture_t *cap);
int  nfq_capture_process(nfq_capture_t *cap);
void nfq_capture_close  (nfq_capture_t *cap);

#endif