* sum(delta(snd_una)), or how many bytes
                                 * were acked.
                                 */
+       __u32 dsack_dups;       /* RFC4898 tcpEStatsStackDSACKDups
+                                * total number of DSACK blocks received
+                                */
+       __u32 delivered;        /* Total data packets delivered incl. rexmits */
+       __u32 delivered_ce;     /* Like the above but only ECE marked packets */
 };
 
 struct bpf_sock_tuple {
 
 bool bpf_tcp_sock_is_valid_access(int off, int size, enum bpf_access_type type,
                                  struct bpf_insn_access_aux *info)
 {
-       if (off < 0 || off >= offsetofend(struct bpf_tcp_sock, bytes_acked))
+       if (off < 0 || off >= offsetofend(struct bpf_tcp_sock, delivered_ce))
                return false;
 
        if (off % size != 0)
        case offsetof(struct bpf_tcp_sock, bytes_acked):
                BPF_TCP_SOCK_GET_COMMON(bytes_acked);
                break;
+       case offsetof(struct bpf_tcp_sock, dsack_dups):
+               BPF_TCP_SOCK_GET_COMMON(dsack_dups);
+               break;
+       case offsetof(struct bpf_tcp_sock, delivered):
+               BPF_TCP_SOCK_GET_COMMON(delivered);
+               break;
+       case offsetof(struct bpf_tcp_sock, delivered_ce):
+               BPF_TCP_SOCK_GET_COMMON(delivered_ce);
+               break;
        }
 
        return insn - insn_buf;