/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (c) 2020, Heinrich Schuchardt <xypron.glpk@gmx.de>
 *
 * Header file for logging tests
 */

#ifndef __SYSLOG_TEST_H
#define __SYSLOG_TEST_H

/**
 * struct sb_log_env - private data for sandbox ethernet driver
 *
 * This structure is used for the private data of the sandbox ethernet
 * driver.
 *
 * @expected:	string expected to be written by the syslog driver
 * @uts:	unit test state
 */
struct sb_log_env {
	const char *expected;
	struct unit_test_state *uts;
};

/**
 * sb_log_tx_handler() - transmit callback function
 *
 * This callback function is invoked when a network package is sent using the
 * sandbox Ethernet driver. The private data of the driver holds a sb_log_env
 * structure with the unit test state and the expected UDP payload.
 *
 * The following checks are executed:
 *
 * * the Ethernet packet indicates a IP broadcast message
 * * the IP header is for a local UDP broadcast message to port 514
 * * the UDP payload matches the expected string
 *
 * After testing the pointer to the expected string is set to NULL to signal
 * that the callback function has been called.
 *
 * @dev:	sandbox ethernet device
 * @packet:	Ethernet packet
 * @len:	length of Ethernet packet
 * Return:	0 = success
 */
int sb_log_tx_handler(struct udevice *dev, void *packet, unsigned int len);

/**
 * syslog_test_setup() - Enable syslog logging ready for tests
 *
 * @uts: Test state
 * @return 0 if OK, -ENOENT if the syslog log driver is not found
 */
int syslog_test_setup(struct unit_test_state *uts);

/**
 * syslog_test_finish() - Disable syslog logging after tests
 *
 * @uts: Test state
 * @return 0 if OK, -ENOENT if the syslog log driver is not found
 */
int syslog_test_finish(struct unit_test_state *uts);

#endif
