__u32 is_mptcp;
 };
 
-static int verify_sk(int map_fd, int client_fd, __u32 is_mptcp)
+static int verify_tsk(int map_fd, int client_fd)
 {
        int err, cfd = client_fd;
        struct mptcp_storage val;
 
-       if (is_mptcp == 1)
-               return 0;
-
        err = bpf_map_lookup_elem(map_fd, &cfd, &val);
        if (!ASSERT_OK(err, "bpf_map_lookup_elem"))
                return err;
        return err;
 }
 
+static int verify_msk(int map_fd, int client_fd)
+{
+       int err, cfd = client_fd;
+       struct mptcp_storage val;
+
+       err = bpf_map_lookup_elem(map_fd, &cfd, &val);
+       if (!ASSERT_OK(err, "bpf_map_lookup_elem"))
+               return err;
+
+       if (!ASSERT_EQ(val.invoked, 1, "unexpected invoked count"))
+               err++;
+
+       if (!ASSERT_EQ(val.is_mptcp, 1, "unexpected is_mptcp"))
+               err++;
+
+       return err;
+}
+
 static int run_test(int cgroup_fd, int server_fd, bool is_mptcp)
 {
        int client_fd, prog_fd, map_fd, err;
                goto out;
        }
 
-       err += is_mptcp ? verify_sk(map_fd, client_fd, 1) :
-                         verify_sk(map_fd, client_fd, 0);
+       err += is_mptcp ? verify_msk(map_fd, client_fd) :
+                         verify_tsk(map_fd, client_fd);
 
        close(client_fd);
 
 
 int _sockops(struct bpf_sock_ops *ctx)
 {
        struct mptcp_storage *storage;
+       struct mptcp_sock *msk;
        int op = (int)ctx->op;
        struct tcp_sock *tsk;
        struct bpf_sock *sk;
                return 1;
 
        is_mptcp = bpf_core_field_exists(tsk->is_mptcp) ? tsk->is_mptcp : 0;
-       storage = bpf_sk_storage_get(&socket_storage_map, sk, 0,
-                                    BPF_SK_STORAGE_GET_F_CREATE);
-       if (!storage)
-               return 1;
+       if (!is_mptcp) {
+               storage = bpf_sk_storage_get(&socket_storage_map, sk, 0,
+                                            BPF_SK_STORAGE_GET_F_CREATE);
+               if (!storage)
+                       return 1;
+       } else {
+               msk = bpf_skc_to_mptcp_sock(sk);
+               if (!msk)
+                       return 1;
 
+               storage = bpf_sk_storage_get(&socket_storage_map, msk, 0,
+                                            BPF_SK_STORAGE_GET_F_CREATE);
+               if (!storage)
+                       return 1;
+       }
        storage->invoked++;
        storage->is_mptcp = is_mptcp;