mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-17 16:47:50 +00:00
Run 'make indent' on all C files
Acked-by: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Adrian Reber <areber@redhat.com>
This commit is contained in:
parent
1e26f170ca
commit
93dd984ca0
542 changed files with 9346 additions and 11605 deletions
248
soccr/soccr.c
248
soccr/soccr.c
|
|
@ -10,21 +10,21 @@
|
|||
|
||||
#ifndef SIOCOUTQNSD
|
||||
/* MAO - Define SIOCOUTQNSD ioctl if we don't have it */
|
||||
#define SIOCOUTQNSD 0x894B
|
||||
#define SIOCOUTQNSD 0x894B
|
||||
#endif
|
||||
|
||||
enum {
|
||||
TCPF_ESTABLISHED = (1 << 1),
|
||||
TCPF_SYN_SENT = (1 << 2),
|
||||
TCPF_SYN_RECV = (1 << 3),
|
||||
TCPF_FIN_WAIT1 = (1 << 4),
|
||||
TCPF_FIN_WAIT2 = (1 << 5),
|
||||
TCPF_TIME_WAIT = (1 << 6),
|
||||
TCPF_CLOSE = (1 << 7),
|
||||
TCPF_CLOSE_WAIT = (1 << 8),
|
||||
TCPF_LAST_ACK = (1 << 9),
|
||||
TCPF_LISTEN = (1 << 10),
|
||||
TCPF_CLOSING = (1 << 11),
|
||||
TCPF_SYN_SENT = (1 << 2),
|
||||
TCPF_SYN_RECV = (1 << 3),
|
||||
TCPF_FIN_WAIT1 = (1 << 4),
|
||||
TCPF_FIN_WAIT2 = (1 << 5),
|
||||
TCPF_TIME_WAIT = (1 << 6),
|
||||
TCPF_CLOSE = (1 << 7),
|
||||
TCPF_CLOSE_WAIT = (1 << 8),
|
||||
TCPF_LAST_ACK = (1 << 9),
|
||||
TCPF_LISTEN = (1 << 10),
|
||||
TCPF_CLOSING = (1 << 11),
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -55,7 +55,7 @@ enum {
|
|||
*/
|
||||
|
||||
/* Restore a fin packet in a send queue first */
|
||||
#define SNDQ_FIRST_FIN (TCPF_FIN_WAIT1 | TCPF_FIN_WAIT2 | TCPF_CLOSING)
|
||||
#define SNDQ_FIRST_FIN (TCPF_FIN_WAIT1 | TCPF_FIN_WAIT2 | TCPF_CLOSING)
|
||||
/* Restore fin in a send queue after restoring fi in the receive queue. */
|
||||
#define SNDQ_SECOND_FIN (TCPF_LAST_ACK | TCPF_CLOSE)
|
||||
#define SNDQ_FIN_ACKED (TCPF_FIN_WAIT2 | TCPF_CLOSE)
|
||||
|
|
@ -64,8 +64,7 @@ enum {
|
|||
#define RCVQ_SECOND_FIN (TCPF_CLOSING)
|
||||
#define RCVQ_FIN_ACKED (TCPF_CLOSE)
|
||||
|
||||
static void (*log)(unsigned int loglevel, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
static void (*log)(unsigned int loglevel, const char *format, ...) __attribute__((__format__(__printf__, 2, 3)));
|
||||
static unsigned int log_level = 0;
|
||||
|
||||
void libsoccr_set_log(unsigned int level, void (*fn)(unsigned int level, const char *fmt, ...))
|
||||
|
|
@ -74,9 +73,17 @@ void libsoccr_set_log(unsigned int level, void (*fn)(unsigned int level, const c
|
|||
log = fn;
|
||||
}
|
||||
|
||||
#define loge(msg, ...) do { if (log && (log_level >= SOCCR_LOG_ERR)) log(SOCCR_LOG_ERR, "Error (%s:%d): " msg, __FILE__, __LINE__, ##__VA_ARGS__); } while (0)
|
||||
#define loge(msg, ...) \
|
||||
do { \
|
||||
if (log && (log_level >= SOCCR_LOG_ERR)) \
|
||||
log(SOCCR_LOG_ERR, "Error (%s:%d): " msg, __FILE__, __LINE__, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#define logerr(msg, ...) loge(msg ": %s\n", ##__VA_ARGS__, strerror(errno))
|
||||
#define logd(msg, ...) do { if (log && (log_level >= SOCCR_LOG_DBG)) log(SOCCR_LOG_DBG, "Debug: " msg, ##__VA_ARGS__); } while (0)
|
||||
#define logd(msg, ...) \
|
||||
do { \
|
||||
if (log && (log_level >= SOCCR_LOG_DBG)) \
|
||||
log(SOCCR_LOG_DBG, "Debug: " msg, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
static int tcp_repair_on(int fd)
|
||||
{
|
||||
|
|
@ -109,10 +116,10 @@ struct libsoccr_sk {
|
|||
union libsoccr_addr *dst_addr;
|
||||
};
|
||||
|
||||
#define SK_FLAG_FREE_RQ 0x1
|
||||
#define SK_FLAG_FREE_SQ 0x2
|
||||
#define SK_FLAG_FREE_SA 0x4
|
||||
#define SK_FLAG_FREE_DA 0x8
|
||||
#define SK_FLAG_FREE_RQ 0x1
|
||||
#define SK_FLAG_FREE_SQ 0x2
|
||||
#define SK_FLAG_FREE_SA 0x4
|
||||
#define SK_FLAG_FREE_DA 0x8
|
||||
|
||||
struct libsoccr_sk *libsoccr_pause(int fd)
|
||||
{
|
||||
|
|
@ -158,17 +165,16 @@ void libsoccr_release(struct libsoccr_sk *sk)
|
|||
}
|
||||
|
||||
struct soccr_tcp_info {
|
||||
__u8 tcpi_state;
|
||||
__u8 tcpi_ca_state;
|
||||
__u8 tcpi_retransmits;
|
||||
__u8 tcpi_probes;
|
||||
__u8 tcpi_backoff;
|
||||
__u8 tcpi_options;
|
||||
__u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
|
||||
__u8 tcpi_state;
|
||||
__u8 tcpi_ca_state;
|
||||
__u8 tcpi_retransmits;
|
||||
__u8 tcpi_probes;
|
||||
__u8 tcpi_backoff;
|
||||
__u8 tcpi_options;
|
||||
__u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
|
||||
};
|
||||
|
||||
static int refresh_sk(struct libsoccr_sk *sk,
|
||||
struct libsoccr_sk_data *data, struct soccr_tcp_info *ti)
|
||||
static int refresh_sk(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, struct soccr_tcp_info *ti)
|
||||
{
|
||||
int size;
|
||||
socklen_t olen = sizeof(*ti);
|
||||
|
|
@ -238,8 +244,7 @@ static int refresh_sk(struct libsoccr_sk *sk,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_stream_options(struct libsoccr_sk *sk,
|
||||
struct libsoccr_sk_data *data, struct soccr_tcp_info *ti)
|
||||
static int get_stream_options(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, struct soccr_tcp_info *ti)
|
||||
{
|
||||
int ret;
|
||||
socklen_t auxl;
|
||||
|
|
@ -277,8 +282,7 @@ static int get_window(struct libsoccr_sk *sk, struct libsoccr_sk_data *data)
|
|||
struct tcp_repair_window opt;
|
||||
socklen_t optlen = sizeof(opt);
|
||||
|
||||
if (getsockopt(sk->fd, SOL_TCP,
|
||||
TCP_REPAIR_WINDOW, &opt, &optlen)) {
|
||||
if (getsockopt(sk->fd, SOL_TCP, TCP_REPAIR_WINDOW, &opt, &optlen)) {
|
||||
/* Appeared since 4.8, but TCP_repair itself is since 3.11 */
|
||||
if (errno == ENOPROTOOPT)
|
||||
return 0;
|
||||
|
|
@ -288,11 +292,11 @@ static int get_window(struct libsoccr_sk *sk, struct libsoccr_sk_data *data)
|
|||
}
|
||||
|
||||
data->flags |= SOCCR_FLAGS_WINDOW;
|
||||
data->snd_wl1 = opt.snd_wl1;
|
||||
data->snd_wnd = opt.snd_wnd;
|
||||
data->max_window = opt.max_window;
|
||||
data->rcv_wnd = opt.rcv_wnd;
|
||||
data->rcv_wup = opt.rcv_wup;
|
||||
data->snd_wl1 = opt.snd_wl1;
|
||||
data->snd_wnd = opt.snd_wnd;
|
||||
data->max_window = opt.max_window;
|
||||
data->rcv_wnd = opt.rcv_wnd;
|
||||
data->rcv_wup = opt.rcv_wup;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -321,8 +325,7 @@ static int get_window(struct libsoccr_sk *sk, struct libsoccr_sk_data *data)
|
|||
*
|
||||
*/
|
||||
|
||||
static int get_queue(int sk, int queue_id,
|
||||
__u32 *seq, __u32 len, char **bufp)
|
||||
static int get_queue(int sk, int queue_id, __u32 *seq, __u32 len, char **bufp)
|
||||
{
|
||||
int ret, aux;
|
||||
socklen_t auxl;
|
||||
|
|
@ -373,7 +376,7 @@ err_recv:
|
|||
/*
|
||||
* This is how much data we've had in the initial libsoccr
|
||||
*/
|
||||
#define SOCR_DATA_MIN_SIZE (17 * sizeof(__u32))
|
||||
#define SOCR_DATA_MIN_SIZE (17 * sizeof(__u32))
|
||||
|
||||
int libsoccr_save(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size)
|
||||
{
|
||||
|
|
@ -406,7 +409,7 @@ int libsoccr_save(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigne
|
|||
return sizeof(struct libsoccr_sk_data);
|
||||
}
|
||||
|
||||
#define GET_Q_FLAGS (SOCCR_MEM_EXCL)
|
||||
#define GET_Q_FLAGS (SOCCR_MEM_EXCL)
|
||||
char *libsoccr_get_queue_bytes(struct libsoccr_sk *sk, int queue_id, unsigned flags)
|
||||
{
|
||||
char **p, *ret;
|
||||
|
|
@ -415,14 +418,14 @@ char *libsoccr_get_queue_bytes(struct libsoccr_sk *sk, int queue_id, unsigned fl
|
|||
return NULL;
|
||||
|
||||
switch (queue_id) {
|
||||
case TCP_RECV_QUEUE:
|
||||
p = &sk->recv_queue;
|
||||
break;
|
||||
case TCP_SEND_QUEUE:
|
||||
p = &sk->send_queue;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
case TCP_RECV_QUEUE:
|
||||
p = &sk->recv_queue;
|
||||
break;
|
||||
case TCP_SEND_QUEUE:
|
||||
p = &sk->send_queue;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = *p;
|
||||
|
|
@ -432,7 +435,7 @@ char *libsoccr_get_queue_bytes(struct libsoccr_sk *sk, int queue_id, unsigned fl
|
|||
return ret;
|
||||
}
|
||||
|
||||
#define GET_SA_FLAGS (SOCCR_MEM_EXCL)
|
||||
#define GET_SA_FLAGS (SOCCR_MEM_EXCL)
|
||||
union libsoccr_addr *libsoccr_get_addr(struct libsoccr_sk *sk, int self, unsigned flags)
|
||||
{
|
||||
if (flags & ~GET_SA_FLAGS)
|
||||
|
|
@ -463,8 +466,7 @@ static int set_queue_seq(struct libsoccr_sk *sk, int queue, __u32 seq)
|
|||
#define TCPOPT_SACK_PERM TCPOPT_SACK_PERMITTED
|
||||
#endif
|
||||
|
||||
static int libsoccr_set_sk_data_noq(struct libsoccr_sk *sk,
|
||||
struct libsoccr_sk_data *data, unsigned data_size)
|
||||
static int libsoccr_set_sk_data_noq(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size)
|
||||
{
|
||||
struct tcp_repair_opt opts[4];
|
||||
int addr_size, mstate;
|
||||
|
|
@ -505,8 +507,7 @@ static int libsoccr_set_sk_data_noq(struct libsoccr_sk *sk,
|
|||
if (mstate & (SNDQ_FIRST_FIN | SNDQ_SECOND_FIN))
|
||||
data->outq_seq--;
|
||||
|
||||
if (set_queue_seq(sk, TCP_RECV_QUEUE,
|
||||
data->inq_seq - data->inq_len))
|
||||
if (set_queue_seq(sk, TCP_RECV_QUEUE, data->inq_seq - data->inq_len))
|
||||
return -2;
|
||||
|
||||
seq = data->outq_seq - data->outq_len;
|
||||
|
|
@ -524,8 +525,7 @@ static int libsoccr_set_sk_data_noq(struct libsoccr_sk *sk,
|
|||
if (data->state == TCP_SYN_SENT && tcp_repair_off(sk->fd))
|
||||
return -1;
|
||||
|
||||
if (connect(sk->fd, &sk->dst_addr->sa, addr_size) == -1 &&
|
||||
errno != EINPROGRESS) {
|
||||
if (connect(sk->fd, &sk->dst_addr->sa, addr_size) == -1 && errno != EINPROGRESS) {
|
||||
logerr("Can't connect inet socket back");
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -563,15 +563,13 @@ static int libsoccr_set_sk_data_noq(struct libsoccr_sk *sk,
|
|||
onr++;
|
||||
|
||||
if (data->state != TCP_SYN_SENT &&
|
||||
setsockopt(sk->fd, SOL_TCP, TCP_REPAIR_OPTIONS,
|
||||
opts, onr * sizeof(struct tcp_repair_opt)) < 0) {
|
||||
setsockopt(sk->fd, SOL_TCP, TCP_REPAIR_OPTIONS, opts, onr * sizeof(struct tcp_repair_opt)) < 0) {
|
||||
logerr("Can't repair options");
|
||||
return -2;
|
||||
}
|
||||
|
||||
if (data->opt_mask & TCPI_OPT_TIMESTAMPS) {
|
||||
if (setsockopt(sk->fd, SOL_TCP, TCP_TIMESTAMP,
|
||||
&data->timestamp, sizeof(data->timestamp)) < 0) {
|
||||
if (setsockopt(sk->fd, SOL_TCP, TCP_TIMESTAMP, &data->timestamp, sizeof(data->timestamp)) < 0) {
|
||||
logerr("Can't set timestamp");
|
||||
return -3;
|
||||
}
|
||||
|
|
@ -586,8 +584,7 @@ static int ipv6_addr_mapped(union libsoccr_addr *addr)
|
|||
return (addr->v6.sin6_addr.s6_addr32[2] == htonl(0x0000ffff));
|
||||
}
|
||||
|
||||
static int send_fin(struct libsoccr_sk *sk, struct libsoccr_sk_data *data,
|
||||
unsigned data_size, uint8_t flags)
|
||||
static int send_fin(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size, uint8_t flags)
|
||||
{
|
||||
uint32_t src_v4 = sk->src_addr->v4.sin_addr.s_addr;
|
||||
uint32_t dst_v4 = sk->dst_addr->v4.sin_addr.s_addr;
|
||||
|
|
@ -611,10 +608,9 @@ static int send_fin(struct libsoccr_sk *sk, struct libsoccr_sk_data *data,
|
|||
else
|
||||
libnet_type = LIBNET_RAW4;
|
||||
|
||||
l = libnet_init(
|
||||
libnet_type, /* injection type */
|
||||
NULL, /* network interface */
|
||||
errbuf); /* errbuf */
|
||||
l = libnet_init(libnet_type, /* injection type */
|
||||
NULL, /* network interface */
|
||||
errbuf); /* errbuf */
|
||||
if (l == NULL) {
|
||||
loge("libnet_init failed (%s)\n", errbuf);
|
||||
return -1;
|
||||
|
|
@ -625,20 +621,19 @@ static int send_fin(struct libsoccr_sk *sk, struct libsoccr_sk_data *data,
|
|||
goto err;
|
||||
}
|
||||
|
||||
ret = libnet_build_tcp(
|
||||
ntohs(sk->dst_addr->v4.sin_port), /* source port */
|
||||
ntohs(sk->src_addr->v4.sin_port), /* destination port */
|
||||
data->inq_seq, /* sequence number */
|
||||
data->outq_seq - data->outq_len, /* acknowledgement num */
|
||||
flags, /* control flags */
|
||||
data->rcv_wnd, /* window size */
|
||||
0, /* checksum */
|
||||
10, /* urgent pointer */
|
||||
LIBNET_TCP_H + 20, /* TCP packet size */
|
||||
NULL, /* payload */
|
||||
0, /* payload size */
|
||||
l, /* libnet handle */
|
||||
0); /* libnet id */
|
||||
ret = libnet_build_tcp(ntohs(sk->dst_addr->v4.sin_port), /* source port */
|
||||
ntohs(sk->src_addr->v4.sin_port), /* destination port */
|
||||
data->inq_seq, /* sequence number */
|
||||
data->outq_seq - data->outq_len, /* acknowledgement num */
|
||||
flags, /* control flags */
|
||||
data->rcv_wnd, /* window size */
|
||||
0, /* checksum */
|
||||
10, /* urgent pointer */
|
||||
LIBNET_TCP_H + 20, /* TCP packet size */
|
||||
NULL, /* payload */
|
||||
0, /* payload size */
|
||||
l, /* libnet handle */
|
||||
0); /* libnet id */
|
||||
if (ret == -1) {
|
||||
loge("Can't build TCP header: %s\n", libnet_geterror(l));
|
||||
goto err;
|
||||
|
|
@ -650,32 +645,29 @@ static int send_fin(struct libsoccr_sk *sk, struct libsoccr_sk_data *data,
|
|||
memcpy(&dst, &sk->dst_addr->v6.sin6_addr, sizeof(dst));
|
||||
memcpy(&src, &sk->src_addr->v6.sin6_addr, sizeof(src));
|
||||
|
||||
ret = libnet_build_ipv6(
|
||||
0, 0,
|
||||
LIBNET_TCP_H, /* length */
|
||||
IPPROTO_TCP, /* protocol */
|
||||
64, /* hop limit */
|
||||
dst, /* source IP */
|
||||
src, /* destination IP */
|
||||
NULL, /* payload */
|
||||
0, /* payload size */
|
||||
l, /* libnet handle */
|
||||
0); /* libnet id */
|
||||
ret = libnet_build_ipv6(0, 0, LIBNET_TCP_H, /* length */
|
||||
IPPROTO_TCP, /* protocol */
|
||||
64, /* hop limit */
|
||||
dst, /* source IP */
|
||||
src, /* destination IP */
|
||||
NULL, /* payload */
|
||||
0, /* payload size */
|
||||
l, /* libnet handle */
|
||||
0); /* libnet id */
|
||||
} else if (family == AF_INET)
|
||||
ret = libnet_build_ipv4(
|
||||
LIBNET_IPV4_H + LIBNET_TCP_H + 20, /* length */
|
||||
0, /* TOS */
|
||||
242, /* IP ID */
|
||||
0, /* IP Frag */
|
||||
64, /* TTL */
|
||||
IPPROTO_TCP, /* protocol */
|
||||
0, /* checksum */
|
||||
dst_v4, /* source IP */
|
||||
src_v4, /* destination IP */
|
||||
NULL, /* payload */
|
||||
0, /* payload size */
|
||||
l, /* libnet handle */
|
||||
0); /* libnet id */
|
||||
ret = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + 20, /* length */
|
||||
0, /* TOS */
|
||||
242, /* IP ID */
|
||||
0, /* IP Frag */
|
||||
64, /* TTL */
|
||||
IPPROTO_TCP, /* protocol */
|
||||
0, /* checksum */
|
||||
dst_v4, /* source IP */
|
||||
src_v4, /* destination IP */
|
||||
NULL, /* payload */
|
||||
0, /* payload size */
|
||||
l, /* libnet handle */
|
||||
0); /* libnet id */
|
||||
else {
|
||||
loge("Unknown socket family\n");
|
||||
goto err;
|
||||
|
|
@ -706,8 +698,7 @@ static int restore_fin_in_snd_queue(int sk, int acked)
|
|||
* If TCP_SEND_QUEUE is set, a fin packet will be
|
||||
* restored as a sent packet.
|
||||
*/
|
||||
if (acked &&
|
||||
setsockopt(sk, SOL_TCP, TCP_REPAIR_QUEUE, &queue, sizeof(queue)) < 0) {
|
||||
if (acked && setsockopt(sk, SOL_TCP, TCP_REPAIR_QUEUE, &queue, sizeof(queue)) < 0) {
|
||||
logerr("Can't set repair queue");
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -717,8 +708,7 @@ static int restore_fin_in_snd_queue(int sk, int acked)
|
|||
logerr("Unable to shut down a socket");
|
||||
|
||||
queue = TCP_NO_QUEUE;
|
||||
if (acked &&
|
||||
setsockopt(sk, SOL_TCP, TCP_REPAIR_QUEUE, &queue, sizeof(queue)) < 0) {
|
||||
if (acked && setsockopt(sk, SOL_TCP, TCP_REPAIR_QUEUE, &queue, sizeof(queue)) < 0) {
|
||||
logerr("Can't set repair queue");
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -726,11 +716,10 @@ static int restore_fin_in_snd_queue(int sk, int acked)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int libsoccr_restore_queue(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size,
|
||||
int queue, char *buf);
|
||||
static int libsoccr_restore_queue(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size, int queue,
|
||||
char *buf);
|
||||
|
||||
int libsoccr_restore(struct libsoccr_sk *sk,
|
||||
struct libsoccr_sk_data *data, unsigned data_size)
|
||||
int libsoccr_restore(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size)
|
||||
{
|
||||
int mstate = 1 << data->state;
|
||||
|
||||
|
|
@ -827,8 +816,7 @@ static int __send_queue(struct libsoccr_sk *sk, int queue, char *buf, __u32 len)
|
|||
continue;
|
||||
}
|
||||
|
||||
logerr("Can't restore %d queue data (%d), want (%d:%d:%d)",
|
||||
queue, ret, chunk, len, max_chunk);
|
||||
logerr("Can't restore %d queue data (%d), want (%d:%d:%d)", queue, ret, chunk, len, max_chunk);
|
||||
goto err;
|
||||
}
|
||||
off += ret;
|
||||
|
|
@ -852,8 +840,8 @@ static int send_queue(struct libsoccr_sk *sk, int queue, char *buf, __u32 len)
|
|||
return __send_queue(sk, queue, buf, len);
|
||||
}
|
||||
|
||||
static int libsoccr_restore_queue(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size,
|
||||
int queue, char *buf)
|
||||
static int libsoccr_restore_queue(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size, int queue,
|
||||
char *buf)
|
||||
{
|
||||
if (!buf)
|
||||
return 0;
|
||||
|
|
@ -900,29 +888,29 @@ static int libsoccr_restore_queue(struct libsoccr_sk *sk, struct libsoccr_sk_dat
|
|||
return -5;
|
||||
}
|
||||
|
||||
#define SET_Q_FLAGS (SOCCR_MEM_EXCL)
|
||||
#define SET_Q_FLAGS (SOCCR_MEM_EXCL)
|
||||
int libsoccr_set_queue_bytes(struct libsoccr_sk *sk, int queue_id, char *bytes, unsigned flags)
|
||||
{
|
||||
if (flags & ~SET_Q_FLAGS)
|
||||
return -1;
|
||||
|
||||
switch (queue_id) {
|
||||
case TCP_RECV_QUEUE:
|
||||
sk->recv_queue = bytes;
|
||||
if (flags & SOCCR_MEM_EXCL)
|
||||
sk->flags |= SK_FLAG_FREE_RQ;
|
||||
return 0;
|
||||
case TCP_SEND_QUEUE:
|
||||
sk->send_queue = bytes;
|
||||
if (flags & SOCCR_MEM_EXCL)
|
||||
sk->flags |= SK_FLAG_FREE_SQ;
|
||||
return 0;
|
||||
case TCP_RECV_QUEUE:
|
||||
sk->recv_queue = bytes;
|
||||
if (flags & SOCCR_MEM_EXCL)
|
||||
sk->flags |= SK_FLAG_FREE_RQ;
|
||||
return 0;
|
||||
case TCP_SEND_QUEUE:
|
||||
sk->send_queue = bytes;
|
||||
if (flags & SOCCR_MEM_EXCL)
|
||||
sk->flags |= SK_FLAG_FREE_SQ;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
#define SET_SA_FLAGS (SOCCR_MEM_EXCL)
|
||||
#define SET_SA_FLAGS (SOCCR_MEM_EXCL)
|
||||
int libsoccr_set_addr(struct libsoccr_sk *sk, int self, union libsoccr_addr *addr, unsigned flags)
|
||||
{
|
||||
if (flags & ~SET_SA_FLAGS)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h> /* for srvaddr_in and inet_ntoa() */
|
||||
#include <arpa/inet.h> /* for srvaddr_in and inet_ntoa() */
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
|
@ -35,7 +35,7 @@ int main(void)
|
|||
|
||||
libsoccr_set_log(10, pr_printf);
|
||||
|
||||
memset(&addr,0,sizeof(addr));
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
|
||||
#ifndef TEST_IPV6
|
||||
addr.v4.sin_family = AF_INET;
|
||||
|
|
@ -56,11 +56,11 @@ int main(void)
|
|||
}
|
||||
|
||||
#ifndef TEST_IPV6
|
||||
addr.v4.sin_port = htons(8765);
|
||||
addr.v4.sin_port = htons(8765);
|
||||
#else
|
||||
addr.v6.sin6_port = htons(8765);
|
||||
addr.v6.sin6_port = htons(8765);
|
||||
#endif
|
||||
ret = bind(srv, (struct sockaddr *) &addr, sizeof(addr));
|
||||
ret = bind(srv, (struct sockaddr *)&addr, sizeof(addr));
|
||||
if (ret == -1) {
|
||||
pr_perror("bind() failed");
|
||||
return -1;
|
||||
|
|
@ -81,13 +81,13 @@ int main(void)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (connect(clnt, (struct sockaddr *) &addr, sizeof(addr))) {
|
||||
if (connect(clnt, (struct sockaddr *)&addr, sizeof(addr))) {
|
||||
pr_perror("connect");
|
||||
return 1;
|
||||
}
|
||||
|
||||
dst_let = sizeof(dst);
|
||||
sock = accept(srv, (struct sockaddr *) &dst, &dst_let);
|
||||
sock = accept(srv, (struct sockaddr *)&dst, &dst_let);
|
||||
if (sock < 0) {
|
||||
pr_perror("accept");
|
||||
return 1;
|
||||
|
|
@ -100,17 +100,16 @@ int main(void)
|
|||
|
||||
/* Start testing */
|
||||
dst_let = sizeof(addr);
|
||||
if (getsockname(sock, (struct sockaddr *) &addr, &dst_let)) {
|
||||
if (getsockname(sock, (struct sockaddr *)&addr, &dst_let)) {
|
||||
pr_perror("getsockname");
|
||||
return 1;
|
||||
}
|
||||
dst_let = sizeof(addr);
|
||||
if (getpeername(sock, (struct sockaddr *) &dst, &dst_let)) {
|
||||
if (getpeername(sock, (struct sockaddr *)&dst, &dst_let)) {
|
||||
pr_perror("getpeername");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
so = libsoccr_pause(sock);
|
||||
|
||||
dsize = libsoccr_save(so, &data, sizeof(data));
|
||||
|
|
|
|||
|
|
@ -10,7 +10,11 @@
|
|||
|
||||
#include "soccr/soccr.h"
|
||||
|
||||
#define pr_perror(fmt, ...) ({ fprintf(stderr, "%s:%d: " fmt " : %m\n", __func__, __LINE__, ##__VA_ARGS__); 1; })
|
||||
#define pr_perror(fmt, ...) \
|
||||
({ \
|
||||
fprintf(stderr, "%s:%d: " fmt " : %m\n", __func__, __LINE__, ##__VA_ARGS__); \
|
||||
1; \
|
||||
})
|
||||
|
||||
struct tcp {
|
||||
char *addr;
|
||||
|
|
@ -22,36 +26,28 @@ struct tcp {
|
|||
|
||||
static void usage(void)
|
||||
{
|
||||
printf(
|
||||
"Usage: --addr ADDR -port PORT --seq SEQ --next --addr ADDR -port PORT --seq SEQ -- CMD ...\n"
|
||||
"\t Describe a source side of a connection, then set the --next option\n"
|
||||
"\t and describe a destination side.\n"
|
||||
"\t --reverse - swap source and destination sides\n"
|
||||
"\t The idea is that the same command line is execute on both sides,\n"
|
||||
"\t but the --reverse is added to one of them.\n"
|
||||
"\n"
|
||||
"\t CMD ... - a user command to handle a socket, which is the descriptor 3.\n"
|
||||
"\n"
|
||||
"\t It prints the \"start\" on stdout when a socket is created and\n"
|
||||
"\t resumes it when you write \"start\" to stdin.\n"
|
||||
);
|
||||
printf("Usage: --addr ADDR -port PORT --seq SEQ --next --addr ADDR -port PORT --seq SEQ -- CMD ...\n"
|
||||
"\t Describe a source side of a connection, then set the --next option\n"
|
||||
"\t and describe a destination side.\n"
|
||||
"\t --reverse - swap source and destination sides\n"
|
||||
"\t The idea is that the same command line is execute on both sides,\n"
|
||||
"\t but the --reverse is added to one of them.\n"
|
||||
"\n"
|
||||
"\t CMD ... - a user command to handle a socket, which is the descriptor 3.\n"
|
||||
"\n"
|
||||
"\t It prints the \"start\" on stdout when a socket is created and\n"
|
||||
"\t resumes it when you write \"start\" to stdin.\n");
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
static const char short_opts[] = "";
|
||||
static struct option long_opts[] = {
|
||||
{ "addr", required_argument, 0, 'a' },
|
||||
{ "port", required_argument, 0, 'p' },
|
||||
{ "seq", required_argument, 0, 's' },
|
||||
{ "next", no_argument, 0, 'n'},
|
||||
{ "reverse", no_argument, 0, 'r'},
|
||||
{},
|
||||
{ "addr", required_argument, 0, 'a' }, { "port", required_argument, 0, 'p' },
|
||||
{ "seq", required_argument, 0, 's' }, { "next", no_argument, 0, 'n' },
|
||||
{ "reverse", no_argument, 0, 'r' }, {},
|
||||
};
|
||||
struct tcp tcp[2] = {
|
||||
{"127.0.0.1", 12345, 5000000, 1460, 7},
|
||||
{"127.0.0.1", 54321, 6000000, 1460, 7}
|
||||
};
|
||||
struct tcp tcp[2] = { { "127.0.0.1", 12345, 5000000, 1460, 7 }, { "127.0.0.1", 54321, 6000000, 1460, 7 } };
|
||||
|
||||
int sk, yes = 1, val, idx, opt, i, src = 0, dst = 1;
|
||||
union libsoccr_addr src_addr, dst_addr;
|
||||
|
|
@ -82,7 +78,8 @@ int main(int argc, char **argv)
|
|||
return pr_perror("--next is used twice or more");
|
||||
break;
|
||||
case 'r':
|
||||
src = 1; dst = 0;
|
||||
src = 1;
|
||||
dst = 0;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue