#define TCPHDR_SYN_ECN (TCPHDR_SYN | TCPHDR_ECE | TCPHDR_CWR)
 
+/* State flags for sacked in struct tcp_skb_cb */
+enum tcp_skb_cb_sacked_flags {
+       TCPCB_SACKED_ACKED      = (1 << 0),     /* SKB ACK'd by a SACK block    */
+       TCPCB_SACKED_RETRANS    = (1 << 1),     /* SKB retransmitted            */
+       TCPCB_LOST              = (1 << 2),     /* SKB is lost                  */
+       TCPCB_TAGBITS           = (TCPCB_SACKED_ACKED | TCPCB_SACKED_RETRANS |
+                                  TCPCB_LOST), /* All tag bits                 */
+       TCPCB_REPAIRED          = (1 << 4),     /* SKB repaired (no skb_mstamp_ns)      */
+       TCPCB_EVER_RETRANS      = (1 << 7),     /* Ever retransmitted frame     */
+       TCPCB_RETRANS           = (TCPCB_SACKED_RETRANS | TCPCB_EVER_RETRANS |
+                                  TCPCB_REPAIRED),
+};
+
 /* This is what the send packet queuing engine uses to pass
  * TCP per-packet control information to the transmission code.
  * We also store the host-order sequence numbers in here too.
        __u8            tcp_flags;      /* TCP header flags. (tcp[13])  */
 
        __u8            sacked;         /* State flags for SACK.        */
-#define TCPCB_SACKED_ACKED     0x01    /* SKB ACK'd by a SACK block    */
-#define TCPCB_SACKED_RETRANS   0x02    /* SKB retransmitted            */
-#define TCPCB_LOST             0x04    /* SKB is lost                  */
-#define TCPCB_TAGBITS          0x07    /* All tag bits                 */
-#define TCPCB_REPAIRED         0x10    /* SKB repaired (no skb_mstamp_ns)      */
-#define TCPCB_EVER_RETRANS     0x80    /* Ever retransmitted frame     */
-#define TCPCB_RETRANS          (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS| \
-                               TCPCB_REPAIRED)
-
        __u8            ip_dsfield;     /* IPv4 tos or IPv6 dsfield     */
        __u8            txstamp_ack:1,  /* Record TX timestamp for ack? */
                        eor:1,          /* Is skb MSG_EOR marked? */