blob: 7dec7065d4c4eceacd340a3f49f4bb9fc370067e [file]
/* SPDX-License-Identifier: BSD-3-Clause */
#include "slirp.h"
static SlirpCb callbacks;
int main(void)
{
SlirpConfig cfg = {
.version = SLIRP_CONFIG_VERSION_MAX,
.vnetwork.s_addr = htonl(0x0a000000),
.vnetmask.s_addr = htonl(0xffff0000),
.vhost.s_addr = htonl(0x0a000002),
.forward_broadcast = true,
.hostfwd_listen_backlog = 32,
.disable_host_loopback = true,
};
Slirp *s = slirp_new(&cfg, &callbacks, NULL);
struct socket so = { .slirp = s };
struct sockaddr_in addr = { .sin_family = AF_INET };
g_assert_cmpint(s->hostfwd_listen_backlog, ==, 32);
so.so_faddr.s_addr = htonl(0x0a00ffff);
so.so_ffamily = AF_INET;
g_assert_cmpint(sotranslate_out(&so, (struct sockaddr_storage *)&addr), ==, 0);
g_assert_cmphex(addr.sin_addr.s_addr, ==, INADDR_BROADCAST);
so.so_faddr.s_addr = INADDR_BROADCAST;
g_assert_cmpint(sotranslate_out(&so, (struct sockaddr_storage *)&addr), ==, 0);
so.so_faddr = cfg.vhost;
g_assert_cmpint(sotranslate_out(&so, (struct sockaddr_storage *)&addr), ==, -1);
slirp_cleanup(s);
cfg.version = 6;
s = slirp_new(&cfg, &callbacks, NULL);
g_assert_false(s->forward_broadcast);
g_assert_cmpint(s->hostfwd_listen_backlog, ==, 1);
so.slirp = s;
so.so_faddr.s_addr = INADDR_BROADCAST;
g_assert_cmpint(sotranslate_out(&so, (struct sockaddr_storage *)&addr), ==, -1);
slirp_cleanup(s);
return 0;
}