#include "tests.h"
#include "print_fields.h"

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <sys/socket.h>
#include "netlink.h"

#define TEST_NETLINK_(fd_, nlh0_,					\
		      type_, type_str_,					\
		      flags_, flags_str_,				\
		      data_len_, src_, slen_, ...)			\
	do {								\
		struct nlmsghdr *const TEST_NETLINK_nlh =		\
			(nlh0_) - (slen_);				\
		const unsigned int msg_len =				\
			NLMSG_HDRLEN + (data_len_);			\
									\
		SET_STRUCT(struct nlmsghdr, TEST_NETLINK_nlh,		\
			.nlmsg_len = msg_len,				\
			.nlmsg_type = (type_),				\
			.nlmsg_flags = (flags_)				\
		);							\
		memcpy(NLMSG_DATA(TEST_NETLINK_nlh), (src_), (slen_));	\
									\
		const char *const errstr =				\
			sprintrc(sendto((fd_), TEST_NETLINK_nlh,	\
					msg_len, MSG_DONTWAIT,		\
					NULL, 0));			\
									\
		printf("sendto(%d, {{len=%u, type=%s"			\
		       ", flags=%s, seq=0, pid=0}, ",			\
		       (fd_), msg_len, (type_str_), (flags_str_));	\
									\
		{ __VA_ARGS__; }					\
									\
		printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",		\
		       msg_len, errstr);				\
	} while (0)

#define TEST_NETLINK(fd_, nlh0_, type_, flags_,				\
		     data_len_, src_, slen_, ...)			\
	TEST_NETLINK_((fd_), (nlh0_),					\
		      (type_), #type_,					\
		      (flags_), #flags_,				\
		      (data_len_), (src_), (slen_), __VA_ARGS__)

#define TEST_NETLINK_OBJECT_EX_(fd_, nlh0_,				\
				type_, type_str_,			\
				flags_, flags_str_,			\
				obj_, fallback_func, ...)		\
	do {								\
		char pattern[DEFAULT_STRLEN];				\
		fill_memory_ex(pattern, sizeof(pattern),		\
			       'a', 'z' - 'a' + 1);			\
		const unsigned int plen =				\
			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\
		/* len < sizeof(obj_) */				\
		TEST_NETLINK_((fd_), (nlh0_),				\
			      (type_), (type_str_),			\
			      (flags_), (flags_str_),			\
			      plen, pattern, plen,			\
			      (fallback_func)(pattern, plen));		\
		/* short read of sizeof(obj_) */			\
		TEST_NETLINK_((fd_), (nlh0_),				\
			      (type_), (type_str_),			\
			      (flags_), (flags_str_),			\
			      sizeof(obj_),				\
			      pattern, plen,				\
			      printf("%p",				\
				     NLMSG_DATA(TEST_NETLINK_nlh)));	\
		/* sizeof(obj_) */					\
		TEST_NETLINK_((fd_), (nlh0_),				\
			      (type_), (type_str_),			\
			      (flags_), (flags_str_),			\
			      sizeof(obj_),				\
			      &(obj_), sizeof(obj_),			\
			      __VA_ARGS__);				\
	} while (0)

#define TEST_NETLINK_OBJECT_EX(fd_, nlh0_,				\
			       type_, flags_,				\
			       obj_, fallback_func, ...)		\
	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
				(type_), #type_,			\
				(flags_), #flags_,			\
				(obj_), (fallback_func), __VA_ARGS__)

#define TEST_NETLINK_OBJECT(fd_, nlh0_,					\
			    type_, flags_,				\
			    obj_, ...)					\
	TEST_NETLINK_OBJECT_EX_((fd_), (nlh0),				\
				(type_), #type_,			\
				(flags_), #flags_,			\
				(obj_), print_quoted_hex, __VA_ARGS__)
