bpf: net: Remove TC_AT_INGRESS_OFFSET and SKB_MONO_DELIVERY_TIME_OFFSET macro
authorMartin KaFai Lau <kafai@fb.com>
Wed, 9 Mar 2022 09:04:50 +0000 (01:04 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 10 Mar 2022 21:57:05 +0000 (22:57 +0100)
This patch removes the TC_AT_INGRESS_OFFSET and
SKB_MONO_DELIVERY_TIME_OFFSET macros.  Instead, PKT_VLAN_PRESENT_OFFSET
is used because all of them are at the same offset.  Comment is added to
make it clear that changing the position of tc_at_ingress or
mono_delivery_time will require to adjust the defined macros.

The earlier discussion can be found here:
https://lore.kernel.org/bpf/419d994e-ff61-7c11-0ec7-11fefcb0186e@iogearbox.net/

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20220309090450.3710955-1-kafai@fb.com
include/linux/skbuff.h
net/core/filter.c

index 2be2631..7b0cb10 100644 (file)
@@ -960,10 +960,10 @@ struct sk_buff {
        __u8                    csum_complete_sw:1;
        __u8                    csum_level:2;
        __u8                    dst_pending_confirm:1;
-       __u8                    mono_delivery_time:1;
+       __u8                    mono_delivery_time:1;   /* See SKB_MONO_DELIVERY_TIME_MASK */
 #ifdef CONFIG_NET_CLS_ACT
        __u8                    tc_skip_classify:1;
-       __u8                    tc_at_ingress:1;
+       __u8                    tc_at_ingress:1;        /* See TC_AT_INGRESS_MASK */
 #endif
 #ifdef CONFIG_IPV6_NDISC_NODETYPE
        __u8                    ndisc_nodetype:2;
@@ -1062,7 +1062,9 @@ struct sk_buff {
 #endif
 #define PKT_TYPE_OFFSET                offsetof(struct sk_buff, __pkt_type_offset)
 
-/* if you move pkt_vlan_present around you also must adapt these constants */
+/* if you move pkt_vlan_present, tc_at_ingress, or mono_delivery_time
+ * around, you also must adapt these constants.
+ */
 #ifdef __BIG_ENDIAN_BITFIELD
 #define PKT_VLAN_PRESENT_BIT   7
 #define TC_AT_INGRESS_MASK             (1 << 0)
@@ -1073,8 +1075,6 @@ struct sk_buff {
 #define SKB_MONO_DELIVERY_TIME_MASK    (1 << 5)
 #endif
 #define PKT_VLAN_PRESENT_OFFSET        offsetof(struct sk_buff, __pkt_vlan_present_offset)
-#define TC_AT_INGRESS_OFFSET offsetof(struct sk_buff, __pkt_vlan_present_offset)
-#define SKB_MONO_DELIVERY_TIME_OFFSET offsetof(struct sk_buff, __pkt_vlan_present_offset)
 
 #ifdef __KERNEL__
 /*
index 88767f7..738a294 100644 (file)
@@ -8896,7 +8896,7 @@ static struct bpf_insn *bpf_convert_dtime_type_read(const struct bpf_insn *si,
        __u8 tmp_reg = BPF_REG_AX;
 
        *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg,
-                             SKB_MONO_DELIVERY_TIME_OFFSET);
+                             PKT_VLAN_PRESENT_OFFSET);
        *insn++ = BPF_ALU32_IMM(BPF_AND, tmp_reg,
                                SKB_MONO_DELIVERY_TIME_MASK);
        *insn++ = BPF_JMP32_IMM(BPF_JEQ, tmp_reg, 0, 2);
@@ -8912,7 +8912,7 @@ static struct bpf_insn *bpf_convert_dtime_type_read(const struct bpf_insn *si,
        *insn++ = BPF_JMP_A(IS_ENABLED(CONFIG_NET_CLS_ACT) ? 6 : 1);
 
 #ifdef CONFIG_NET_CLS_ACT
-       *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg, TC_AT_INGRESS_OFFSET);
+       *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg, PKT_VLAN_PRESENT_OFFSET);
        *insn++ = BPF_ALU32_IMM(BPF_AND, tmp_reg, TC_AT_INGRESS_MASK);
        *insn++ = BPF_JMP32_IMM(BPF_JEQ, tmp_reg, 0, 2);
        /* At ingress, value_reg = 0 */
@@ -8959,14 +8959,14 @@ static struct bpf_insn *bpf_convert_tstamp_read(const struct bpf_prog *prog,
        if (!prog->delivery_time_access) {
                __u8 tmp_reg = BPF_REG_AX;
 
-               *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg, TC_AT_INGRESS_OFFSET);
+               *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg, PKT_VLAN_PRESENT_OFFSET);
                *insn++ = BPF_ALU32_IMM(BPF_AND, tmp_reg, TC_AT_INGRESS_MASK);
                *insn++ = BPF_JMP32_IMM(BPF_JEQ, tmp_reg, 0, 5);
                /* @ingress, read __sk_buff->tstamp as the (rcv) timestamp,
                 * so check the skb->mono_delivery_time.
                 */
                *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg,
-                                     SKB_MONO_DELIVERY_TIME_OFFSET);
+                                     PKT_VLAN_PRESENT_OFFSET);
                *insn++ = BPF_ALU32_IMM(BPF_AND, tmp_reg,
                                        SKB_MONO_DELIVERY_TIME_MASK);
                *insn++ = BPF_JMP32_IMM(BPF_JEQ, tmp_reg, 0, 2);
@@ -8992,18 +8992,18 @@ static struct bpf_insn *bpf_convert_tstamp_write(const struct bpf_prog *prog,
        if (!prog->delivery_time_access) {
                __u8 tmp_reg = BPF_REG_AX;
 
-               *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg, TC_AT_INGRESS_OFFSET);
+               *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg, PKT_VLAN_PRESENT_OFFSET);
                *insn++ = BPF_ALU32_IMM(BPF_AND, tmp_reg, TC_AT_INGRESS_MASK);
                *insn++ = BPF_JMP32_IMM(BPF_JEQ, tmp_reg, 0, 3);
                /* Writing __sk_buff->tstamp at ingress as the (rcv) timestamp.
                 * Clear the skb->mono_delivery_time.
                 */
                *insn++ = BPF_LDX_MEM(BPF_B, tmp_reg, skb_reg,
-                                     SKB_MONO_DELIVERY_TIME_OFFSET);
+                                     PKT_VLAN_PRESENT_OFFSET);
                *insn++ = BPF_ALU32_IMM(BPF_AND, tmp_reg,
                                        ~SKB_MONO_DELIVERY_TIME_MASK);
                *insn++ = BPF_STX_MEM(BPF_B, skb_reg, tmp_reg,
-                                     SKB_MONO_DELIVERY_TIME_OFFSET);
+                                     PKT_VLAN_PRESENT_OFFSET);
        }
 #endif