@@ -234,6 +234,7 @@ struct mptcp_sock {
struct inet_connection_sock sk;
__u32 token;
+ struct sock *first;
char ca_name[TCP_CA_NAME_MAX];
} __attribute__((preserve_access_index));
@@ -13,7 +13,9 @@
struct mptcp_storage {
__u32 invoked;
__u32 is_mptcp;
+ struct sock *sk;
__u32 token;
+ struct sock *first;
char ca_name[TCP_CA_NAME_MAX];
};
@@ -136,6 +138,12 @@ static int verify_msk(int map_fd, int client_fd)
err++;
}
+ if (val.first != val.sk) {
+ log_err("Unexpected mptcp_sock.first %p != %p",
+ val.first, val.sk);
+ err++;
+ }
+
if (strncmp(val.ca_name, ca_name, TCP_CA_NAME_MAX)) {
log_err("Unexpected mptcp_sock.ca_name %s != %s",
val.ca_name, ca_name);
@@ -13,7 +13,9 @@ extern bool CONFIG_MPTCP __kconfig;
struct mptcp_storage {
__u32 invoked;
__u32 is_mptcp;
+ struct sock *sk;
__u32 token;
+ struct sock *first;
char ca_name[TCP_CA_NAME_MAX];
};
@@ -54,6 +56,7 @@ int _sockops(struct bpf_sock_ops *ctx)
storage->token = 0;
bzero(storage->ca_name, TCP_CA_NAME_MAX);
+ storage->first = NULL;
} else {
if (!CONFIG_MPTCP)
return 1;
@@ -69,9 +72,11 @@ int _sockops(struct bpf_sock_ops *ctx)
storage->token = msk->token;
memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX);
+ storage->first = msk->first;
}
storage->invoked++;
storage->is_mptcp = is_mptcp;
+ storage->sk = (struct sock *)sk;
return 1;
}