/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */

#ifndef _UTILS_MCTP_CAPTURE_H
#define _UTILS_MCTP_CAPTURE_H

#include "config.h"

#include "compiler.h"
#include "libmctp.h"

#include <sys/types.h>

#if HAVE_PCAP
#include <pcap/pcap.h>
#else
typedef void pcap_t;
typedef void pcap_dumper_t;
#endif

#define CAPTURE_LINKTYPE_FIRST 147
#define CAPTURE_LINKTYPE_LAST  162

struct capture {
	const char *path;
	int linktype;
	pcap_t *pcap;
	pcap_dumper_t *dumper;
};

#if HAVE_PCAP
int capture_init(void);
int capture_prepare(struct capture *cap);
void capture_close(struct capture *cap);
void capture_binding(struct mctp_pktbuf *pkt, void *user);
void capture_socket(pcap_dumper_t *dumper, const void *buf, size_t len);
#else
#include <stdio.h>
static inline int capture_init(void)
{
	fprintf(stderr,
		"libpcap support is disabled, cannot initialise libpcap\n");
	return 0;
}

static inline int capture_prepare(struct capture *cap)
{
	fprintf(stderr, "libpcap support is disabled, cannot capture to %s\n",
		cap->path);
	return 0;
}

static inline void capture_close(struct capture *cap __unused)
{
}

static inline void capture_binding(struct mctp_pktbuf *pkt __unused,
				   void *user __unused)
{
}

static inline void capture_socket(pcap_dumper_t *dumper __unused,
				  const void *buf __unused, size_t len __unused)
{
}
#endif
#endif
