2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-22 01:51:51 +00:00
criu/test/zdtm/static/sock_opts02.c
Kir Kolyshkin 0194ed392f Fix some codespell warnings
Brought to you by

	codespell -w

(using codespell v2.1.0).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2022-04-28 17:53:52 -07:00

119 lines
2.4 KiB
C

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "zdtmtst.h"
const char *test_doc = "Check that SO_BUF_LOCK option dumped";
const char *test_author = "Pavel Tikhomirov <ptikhomirov@virtuozzo.com>";
#ifndef SO_BUF_LOCK
#define SO_BUF_LOCK 72
#endif
#ifndef SOCK_SNDBUF_LOCK
#define SOCK_SNDBUF_LOCK 1
#endif
#ifndef SOCK_RCVBUF_LOCK
#define SOCK_RCVBUF_LOCK 2
#endif
#define BUFSIZE 16384
struct sk_opt {
int type;
uint32_t val;
uint32_t lock;
} sk_opts[] = { { SO_BUF_LOCK, 0, 0 },
{ SO_BUF_LOCK, SOCK_SNDBUF_LOCK, SOCK_SNDBUF_LOCK },
{ SO_BUF_LOCK, SOCK_RCVBUF_LOCK, SOCK_RCVBUF_LOCK },
{ SO_BUF_LOCK, SOCK_SNDBUF_LOCK | SOCK_RCVBUF_LOCK, SOCK_SNDBUF_LOCK | SOCK_RCVBUF_LOCK },
{ SO_SNDBUF, BUFSIZE, SOCK_SNDBUF_LOCK },
{ SO_RCVBUF, BUFSIZE, SOCK_RCVBUF_LOCK } };
#define NSOCK ARRAY_SIZE(sk_opts)
char *type_to_str(int type)
{
switch (type) {
case SO_BUF_LOCK:
return "SO_BUF_LOCK";
case SO_SNDBUFFORCE:
return "SO_SNDBUFFORCE";
case SO_RCVBUFFORCE:
return "SO_RCVBUFFORCE";
}
return NULL;
}
int main(int argc, char **argv)
{
int sock[NSOCK];
int ret, i;
int exit_code = 1;
test_init(argc, argv);
for (i = 0; i < NSOCK; i++)
sock[i] = -1;
for (i = 0; i < NSOCK; i++) {
uint32_t tmp;
socklen_t len;
sock[i] = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock[i] < 0) {
pr_perror("can't create socket %d", i);
goto err;
}
ret = setsockopt(sock[i], SOL_SOCKET, sk_opts[i].type, &sk_opts[i].val, sizeof(sk_opts[i].val));
if (ret < 0) {
pr_perror("can't set %s (%u) on socket %d", type_to_str(sk_opts[i].type), sk_opts[i].val, i);
goto err;
}
len = sizeof(tmp);
ret = getsockopt(sock[i], SOL_SOCKET, SO_BUF_LOCK, &tmp, &len);
if (ret < 0) {
pr_perror("can't get SO_BUF_LOCK from socket %d", i);
goto err;
}
if (tmp != sk_opts[i].lock) {
fail("SO_BUF_LOCK mismatch %u != %u", tmp, sk_opts[i].lock);
goto err;
}
}
test_daemon();
test_waitsig();
for (i = 0; i < NSOCK; i++) {
uint32_t tmp;
socklen_t len;
len = sizeof(tmp);
ret = getsockopt(sock[i], SOL_SOCKET, SO_BUF_LOCK, &tmp, &len);
if (ret < 0) {
pr_perror("can't get SO_BUF_LOCK from socket %d", i);
goto err;
}
if (tmp != sk_opts[i].lock) {
fail("SO_BUF_LOCK mismatch %u != %u", tmp, sk_opts[i].lock);
goto err;
}
}
pass();
exit_code = 0;
err:
for (i = 0; i < NSOCK; i++)
close(sock[i]);
return exit_code;
}