Commit 5dcff89e authored by Paolo Abeni's avatar Paolo Abeni Committed by Jakub Kicinski
Browse files

selftests: mptcp: explicitly tests aggregate counters

Update the existing sockopt test-case to do some basic checks
on the newly added counters.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/385


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Reviewed-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 38967f42
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -51,6 +51,11 @@ struct mptcp_info {
	__u8	mptcpi_local_addr_used;
	__u8	mptcpi_local_addr_max;
	__u8	mptcpi_csum_enabled;
	__u32	mptcpi_retransmits;
	__u64	mptcpi_bytes_retrans;
	__u64	mptcpi_bytes_sent;
	__u64	mptcpi_bytes_received;
	__u64	mptcpi_bytes_acked;
};

struct mptcp_subflow_data {
@@ -83,8 +88,10 @@ struct mptcp_subflow_addrs {

struct so_state {
	struct mptcp_info mi;
	struct mptcp_info last_sample;
	uint64_t mptcpi_rcv_delta;
	uint64_t tcpi_rcv_delta;
	bool pkt_stats_avail;
};

#ifndef MIN
@@ -322,8 +329,9 @@ static void do_getsockopt_mptcp_info(struct so_state *s, int fd, size_t w)
	if (ret < 0)
		die_perror("getsockopt MPTCP_INFO");

	assert(olen == sizeof(i));
	s->pkt_stats_avail = olen >= sizeof(i);

	s->last_sample = i;
	if (s->mi.mptcpi_write_seq == 0)
		s->mi = i;

@@ -562,6 +570,23 @@ static void process_one_client(int fd, int pipefd)
	do_getsockopts(&s, fd, ret, ret2);
	if (s.mptcpi_rcv_delta != (uint64_t)ret + 1)
		xerror("mptcpi_rcv_delta %" PRIu64 ", expect %" PRIu64, s.mptcpi_rcv_delta, ret + 1, s.mptcpi_rcv_delta - ret);

	/* be nice when running on top of older kernel */
	if (s.pkt_stats_avail) {
		if (s.last_sample.mptcpi_bytes_sent != ret2)
			xerror("mptcpi_bytes_sent %" PRIu64 ", expect %" PRIu64,
			       s.last_sample.mptcpi_bytes_sent, ret2,
			       s.last_sample.mptcpi_bytes_sent - ret2);
		if (s.last_sample.mptcpi_bytes_received != ret)
			xerror("mptcpi_bytes_received %" PRIu64 ", expect %" PRIu64,
			       s.last_sample.mptcpi_bytes_received, ret,
			       s.last_sample.mptcpi_bytes_received - ret);
		if (s.last_sample.mptcpi_bytes_acked != ret)
			xerror("mptcpi_bytes_acked %" PRIu64 ", expect %" PRIu64,
			       s.last_sample.mptcpi_bytes_acked, ret2,
			       s.last_sample.mptcpi_bytes_acked - ret2);
	}

	close(fd);
}