* [PATCH net-next 0/6] Remove VLAN.CFI overload
@ 2018-11-10 18:58 Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 1/6] net/skbuff: add macros for VLAN_PRESENT bit Michał Mirosław
` (7 more replies)
0 siblings, 8 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: Alexei Starovoitov, Benjamin Herrenschmidt, Daniel Borkmann,
David S. Miller, James Hogan, linux-mips, linuxppc-dev,
Michael Ellerman, Paul Burton, Paul Mackerras, Ralf Baechle,
sparclinux
Fix BPF code/JITs to allow for separate VLAN_PRESENT flag
storage and finally move the flag to separate storage in skbuff.
This is final step to make CLAN.CFI transparent to core Linux
networking stack.
An #ifdef is introduced temporarily to mark fragments masking
VLAN_TAG_PRESENT. This is removed altogether in the final patch.
---
Michał Mirosław (6):
net/skbuff: add macros for VLAN_PRESENT bit
net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI
net/bpf_jit: MIPS: split VLAN_PRESENT bit handling from VLAN_TCI
net/bpf_jit: PPC: split VLAN_PRESENT bit handling from VLAN_TCI
net/bpf_jit: SPARC: split VLAN_PRESENT bit handling from VLAN_TCI
net: remove VLAN_TAG_PRESENT
arch/mips/net/bpf_jit.c | 18 ++++++++---------
arch/powerpc/net/bpf_jit_comp.c | 15 +++++++-------
arch/sparc/net/bpf_jit_comp_32.c | 13 ++++++------
include/linux/if_vlan.h | 11 ++++++-----
include/linux/skbuff.h | 10 +++++++++-
lib/test_bpf.c | 14 +++++++------
net/core/filter.c | 34 ++++++++++++++------------------
7 files changed, 60 insertions(+), 55 deletions(-)
--
2.19.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net-next 1/6] net/skbuff: add macros for VLAN_PRESENT bit
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
@ 2018-11-10 18:58 ` Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
` (6 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: David S. Miller, Alexei Starovoitov, Benjamin Herrenschmidt,
Daniel Borkmann, James Hogan, linux-mips, linuxppc-dev,
Michael Ellerman, Paul Burton, Paul Mackerras, Ralf Baechle,
sparclinux
Wrap VLAN_PRESENT bit using macro like PKT_TYPE_* and CLONED_*,
as used by BPF code.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
include/linux/skbuff.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 7dcfb5591dc3..99f38779332c 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -816,6 +816,12 @@ struct sk_buff {
__u32 priority;
int skb_iif;
__u32 hash;
+#define PKT_VLAN_PRESENT_BIT 4 // CFI (12-th bit) in TCI
+#ifdef __BIG_ENDIAN
+#define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, vlan_tci)
+#else
+#define PKT_VLAN_PRESENT_OFFSET() (offsetof(struct sk_buff, vlan_tci) + 1)
+#endif
__be16 vlan_proto;
__u16 vlan_tci;
#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)
--
2.19.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 1/6] net/skbuff: add macros for VLAN_PRESENT bit Michał Mirosław
@ 2018-11-10 18:58 ` Michał Mirosław
2018-11-19 11:26 ` Daniel Borkmann
2018-11-10 18:58 ` [PATCH net-next 3/6] net/bpf_jit: MIPS: " Michał Mirosław
` (5 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: Alexei Starovoitov, Daniel Borkmann, Benjamin Herrenschmidt,
David S. Miller, James Hogan, linux-mips, linuxppc-dev,
Michael Ellerman, Paul Burton, Paul Mackerras, Ralf Baechle,
sparclinux
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
net/core/filter.c | 40 +++++++++++++++++++++-------------------
1 file changed, 21 insertions(+), 19 deletions(-)
diff --git a/net/core/filter.c b/net/core/filter.c
index e521c5ebc7d1..c151b906df53 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -296,22 +296,21 @@ static u32 convert_skb_access(int skb_field, int dst_reg, int src_reg,
break;
case SKF_AD_VLAN_TAG:
- case SKF_AD_VLAN_TAG_PRESENT:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2);
- BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000);
/* dst_reg = *(u16 *) (src_reg + offsetof(vlan_tci)) */
*insn++ = BPF_LDX_MEM(BPF_H, dst_reg, src_reg,
offsetof(struct sk_buff, vlan_tci));
- if (skb_field == SKF_AD_VLAN_TAG) {
- *insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg,
- ~VLAN_TAG_PRESENT);
- } else {
- /* dst_reg >>= 12 */
- *insn++ = BPF_ALU32_IMM(BPF_RSH, dst_reg, 12);
- /* dst_reg &= 1 */
+#ifdef VLAN_TAG_PRESENT
+ *insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg, ~VLAN_TAG_PRESENT);
+#endif
+ break;
+ case SKF_AD_VLAN_TAG_PRESENT:
+ *insn++ = BPF_LDX_MEM(BPF_B, dst_reg, src_reg, PKT_VLAN_PRESENT_OFFSET());
+ if (PKT_VLAN_PRESENT_BIT)
+ *insn++ = BPF_ALU32_IMM(BPF_RSH, dst_reg, PKT_VLAN_PRESENT_BIT);
+ if (PKT_VLAN_PRESENT_BIT < 7)
*insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg, 1);
- }
break;
}
@@ -6140,19 +6139,22 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type,
break;
case offsetof(struct __sk_buff, vlan_present):
+ *target_size = 1;
+ *insn++ = BPF_LDX_MEM(BPF_B, si->dst_reg, si->src_reg,
+ PKT_VLAN_PRESENT_OFFSET());
+ if (PKT_VLAN_PRESENT_BIT)
+ *insn++ = BPF_ALU32_IMM(BPF_RSH, si->dst_reg, PKT_VLAN_PRESENT_BIT);
+ if (PKT_VLAN_PRESENT_BIT < 7)
+ *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, 1);
+ break;
+
case offsetof(struct __sk_buff, vlan_tci):
- BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000);
-
*insn++ = BPF_LDX_MEM(BPF_H, si->dst_reg, si->src_reg,
bpf_target_off(struct sk_buff, vlan_tci, 2,
target_size));
- if (si->off == offsetof(struct __sk_buff, vlan_tci)) {
- *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg,
- ~VLAN_TAG_PRESENT);
- } else {
- *insn++ = BPF_ALU32_IMM(BPF_RSH, si->dst_reg, 12);
- *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, 1);
- }
+#ifdef VLAN_TAG_PRESENT
+ *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, ~VLAN_TAG_PRESENT);
+#endif
break;
case offsetof(struct __sk_buff, cb[0]) ...
--
2.19.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net-next 4/6] net/bpf_jit: PPC: split VLAN_PRESENT bit handling from VLAN_TCI
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
` (2 preceding siblings ...)
2018-11-10 18:58 ` [PATCH net-next 3/6] net/bpf_jit: MIPS: " Michał Mirosław
@ 2018-11-10 18:58 ` Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 6/6] net: remove VLAN_TAG_PRESENT Michał Mirosław
` (3 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman,
linuxppc-dev, Alexei Starovoitov, Daniel Borkmann,
David S. Miller, James Hogan, linux-mips, Paul Burton,
Ralf Baechle, sparclinux
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
arch/powerpc/net/bpf_jit_comp.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index d5bfe24bb3b5..dc4a2f54e829 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -379,18 +379,20 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
hash));
break;
case BPF_ANC | SKF_AD_VLAN_TAG:
- case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2);
- BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000);
PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
vlan_tci));
- if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) {
- PPC_ANDI(r_A, r_A, ~VLAN_TAG_PRESENT);
- } else {
- PPC_ANDI(r_A, r_A, VLAN_TAG_PRESENT);
- PPC_SRWI(r_A, r_A, 12);
- }
+#ifdef VLAN_TAG_PRESENT
+ PPC_ANDI(r_A, r_A, ~VLAN_TAG_PRESENT);
+#endif
+ break;
+ case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
+ PPC_LBZ_OFFS(r_A, r_skb, PKT_VLAN_PRESENT_OFFSET());
+ if (PKT_VLAN_PRESENT_BIT)
+ PPC_SRWI(r_A, r_A, PKT_VLAN_PRESENT_BIT);
+ if (PKT_VLAN_PRESENT_BIT < 7)
+ PPC_ANDI(r_A, r_A, 1);
break;
case BPF_ANC | SKF_AD_QUEUE:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff,
--
2.19.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net-next 3/6] net/bpf_jit: MIPS: split VLAN_PRESENT bit handling from VLAN_TCI
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 1/6] net/skbuff: add macros for VLAN_PRESENT bit Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
@ 2018-11-10 18:58 ` Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 4/6] net/bpf_jit: PPC: " Michał Mirosław
` (4 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: Ralf Baechle, Paul Burton, James Hogan, linux-mips,
Alexei Starovoitov, Benjamin Herrenschmidt, Daniel Borkmann,
David S. Miller, linuxppc-dev, Michael Ellerman, Paul Mackerras,
sparclinux
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
arch/mips/net/bpf_jit.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
index 4d8cb9bb8365..de4c6372ad9a 100644
--- a/arch/mips/net/bpf_jit.c
+++ b/arch/mips/net/bpf_jit.c
@@ -1159,19 +1159,22 @@ static int build_body(struct jit_ctx *ctx)
emit_load(r_A, r_skb, off, ctx);
break;
case BPF_ANC | SKF_AD_VLAN_TAG:
- case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
ctx->flags |= SEEN_SKB | SEEN_A;
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff,
vlan_tci) != 2);
off = offsetof(struct sk_buff, vlan_tci);
- emit_half_load_unsigned(r_s0, r_skb, off, ctx);
- if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) {
- emit_andi(r_A, r_s0, (u16)~VLAN_TAG_PRESENT, ctx);
- } else {
- emit_andi(r_A, r_s0, VLAN_TAG_PRESENT, ctx);
- /* return 1 if present */
- emit_sltu(r_A, r_zero, r_A, ctx);
- }
+ emit_half_load_unsigned(r_A, r_skb, off, ctx);
+#ifdef VLAN_TAG_PRESENT
+ emit_andi(r_A, r_A, (u16)~VLAN_TAG_PRESENT, ctx);
+#endif
+ break;
+ case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
+ ctx->flags |= SEEN_SKB | SEEN_A;
+ emit_load_byte(r_A, r_skb, PKT_VLAN_PRESENT_OFFSET(), ctx);
+ if (PKT_VLAN_PRESENT_BIT)
+ emit_srl(r_A, r_A, PKT_VLAN_PRESENT_BIT, ctx);
+ if (PKT_VLAN_PRESENT_BIT < 7)
+ emit_andi(r_A, r_A, 1, ctx);
break;
case BPF_ANC | SKF_AD_PKTTYPE:
ctx->flags |= SEEN_SKB;
--
2.19.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net-next 5/6] net/bpf_jit: SPARC: split VLAN_PRESENT bit handling from VLAN_TCI
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
` (4 preceding siblings ...)
2018-11-10 18:58 ` [PATCH net-next 6/6] net: remove VLAN_TAG_PRESENT Michał Mirosław
@ 2018-11-10 18:58 ` Michał Mirosław
2018-11-10 21:47 ` [PATCH net-next 0/6] Remove VLAN.CFI overload David Miller
2018-11-17 3:26 ` David Miller
7 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: David S. Miller, sparclinux, Alexei Starovoitov,
Benjamin Herrenschmidt, Daniel Borkmann, James Hogan, linux-mips,
linuxppc-dev, Michael Ellerman, Paul Burton, Paul Mackerras,
Ralf Baechle
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
arch/sparc/net/bpf_jit_comp_32.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/arch/sparc/net/bpf_jit_comp_32.c b/arch/sparc/net/bpf_jit_comp_32.c
index a5ff88643d5c..48f3c04dd179 100644
--- a/arch/sparc/net/bpf_jit_comp_32.c
+++ b/arch/sparc/net/bpf_jit_comp_32.c
@@ -552,15 +552,18 @@ void bpf_jit_compile(struct bpf_prog *fp)
emit_skb_load32(hash, r_A);
break;
case BPF_ANC | SKF_AD_VLAN_TAG:
- case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
emit_skb_load16(vlan_tci, r_A);
- if (code != (BPF_ANC | SKF_AD_VLAN_TAG)) {
- emit_alu_K(SRL, 12);
+#ifdef VLAN_TAG_PRESENT
+ emit_loadimm(~VLAN_TAG_PRESENT, r_TMP);
+ emit_and(r_A, r_TMP, r_A);
+#endif
+ break;
+ case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
+ __emit_skb_load8(__pkt_vlan_present_offset, r_A);
+ if (PKT_VLAN_PRESENT_BIT)
+ emit_alu_K(SRL, PKT_VLAN_PRESENT_BIT);
+ if (PKT_VLAN_PRESENT_BIT < 7)
emit_andi(r_A, 1, r_A);
- } else {
- emit_loadimm(~VLAN_TAG_PRESENT, r_TMP);
- emit_and(r_A, r_TMP, r_A);
- }
break;
case BPF_LD | BPF_W | BPF_LEN:
emit_skb_load32(len, r_A);
--
2.19.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net-next 6/6] net: remove VLAN_TAG_PRESENT
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
` (3 preceding siblings ...)
2018-11-10 18:58 ` [PATCH net-next 4/6] net/bpf_jit: PPC: " Michał Mirosław
@ 2018-11-10 18:58 ` Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 5/6] net/bpf_jit: SPARC: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
` (2 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-10 18:58 UTC (permalink / raw)
To: netdev
Cc: Alexei Starovoitov, Benjamin Herrenschmidt, Daniel Borkmann,
David S. Miller, James Hogan, linux-mips, linuxppc-dev,
Michael Ellerman, Paul Burton, Paul Mackerras, Ralf Baechle,
sparclinux
Replace VLAN_TAG_PRESENT with single bit flag and free up
VLAN.CFI overload. Now VLAN.CFI is visible in networking stack
and can be passed around intact.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
arch/mips/net/bpf_jit.c | 3 ---
arch/powerpc/net/bpf_jit_comp.c | 3 ---
arch/sparc/net/bpf_jit_comp_32.c | 4 ----
include/linux/if_vlan.h | 11 ++++++-----
include/linux/skbuff.h | 16 +++++++++-------
lib/test_bpf.c | 14 ++++++++------
net/core/filter.c | 6 ------
7 files changed, 23 insertions(+), 34 deletions(-)
diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
index de4c6372ad9a..3a0e34f4e615 100644
--- a/arch/mips/net/bpf_jit.c
+++ b/arch/mips/net/bpf_jit.c
@@ -1164,9 +1164,6 @@ static int build_body(struct jit_ctx *ctx)
vlan_tci) != 2);
off = offsetof(struct sk_buff, vlan_tci);
emit_half_load_unsigned(r_A, r_skb, off, ctx);
-#ifdef VLAN_TAG_PRESENT
- emit_andi(r_A, r_A, (u16)~VLAN_TAG_PRESENT, ctx);
-#endif
break;
case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
ctx->flags |= SEEN_SKB | SEEN_A;
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index dc4a2f54e829..91d223cf512b 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -383,9 +383,6 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
vlan_tci));
-#ifdef VLAN_TAG_PRESENT
- PPC_ANDI(r_A, r_A, ~VLAN_TAG_PRESENT);
-#endif
break;
case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
PPC_LBZ_OFFS(r_A, r_skb, PKT_VLAN_PRESENT_OFFSET());
diff --git a/arch/sparc/net/bpf_jit_comp_32.c b/arch/sparc/net/bpf_jit_comp_32.c
index 48f3c04dd179..84cc8f7f83e9 100644
--- a/arch/sparc/net/bpf_jit_comp_32.c
+++ b/arch/sparc/net/bpf_jit_comp_32.c
@@ -553,10 +553,6 @@ void bpf_jit_compile(struct bpf_prog *fp)
break;
case BPF_ANC | SKF_AD_VLAN_TAG:
emit_skb_load16(vlan_tci, r_A);
-#ifdef VLAN_TAG_PRESENT
- emit_loadimm(~VLAN_TAG_PRESENT, r_TMP);
- emit_and(r_A, r_TMP, r_A);
-#endif
break;
case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
__emit_skb_load8(__pkt_vlan_present_offset, r_A);
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 1be5230921b5..7a541eadf78e 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -66,7 +66,6 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
#define VLAN_PRIO_MASK 0xe000 /* Priority Code Point */
#define VLAN_PRIO_SHIFT 13
#define VLAN_CFI_MASK 0x1000 /* Canonical Format Indicator */
-#define VLAN_TAG_PRESENT VLAN_CFI_MASK
#define VLAN_VID_MASK 0x0fff /* VLAN Identifier */
#define VLAN_N_VID 4096
@@ -78,8 +77,8 @@ static inline bool is_vlan_dev(const struct net_device *dev)
return dev->priv_flags & IFF_802_1Q_VLAN;
}
-#define skb_vlan_tag_present(__skb) ((__skb)->vlan_tci & VLAN_TAG_PRESENT)
-#define skb_vlan_tag_get(__skb) ((__skb)->vlan_tci & ~VLAN_TAG_PRESENT)
+#define skb_vlan_tag_present(__skb) ((__skb)->vlan_present)
+#define skb_vlan_tag_get(__skb) ((__skb)->vlan_tci)
#define skb_vlan_tag_get_id(__skb) ((__skb)->vlan_tci & VLAN_VID_MASK)
#define skb_vlan_tag_get_prio(__skb) (((__skb)->vlan_tci & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT)
@@ -480,7 +479,7 @@ static inline struct sk_buff *vlan_insert_tag_set_proto(struct sk_buff *skb,
*/
static inline void __vlan_hwaccel_clear_tag(struct sk_buff *skb)
{
- skb->vlan_tci = 0;
+ skb->vlan_present = 0;
}
/**
@@ -492,6 +491,7 @@ static inline void __vlan_hwaccel_clear_tag(struct sk_buff *skb)
*/
static inline void __vlan_hwaccel_copy_tag(struct sk_buff *dst, const struct sk_buff *src)
{
+ dst->vlan_present = src->vlan_present;
dst->vlan_proto = src->vlan_proto;
dst->vlan_tci = src->vlan_tci;
}
@@ -526,7 +526,8 @@ static inline void __vlan_hwaccel_put_tag(struct sk_buff *skb,
__be16 vlan_proto, u16 vlan_tci)
{
skb->vlan_proto = vlan_proto;
- skb->vlan_tci = VLAN_TAG_PRESENT | vlan_tci;
+ skb->vlan_tci = vlan_tci;
+ skb->vlan_present = 1;
}
/**
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 99f38779332c..b9aa0d1b21cf 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -777,6 +777,14 @@ struct sk_buff {
__u8 encap_hdr_csum:1;
__u8 csum_valid:1;
+#ifdef __BIG_ENDIAN_BITFIELD
+#define PKT_VLAN_PRESENT_BIT 7
+#else
+#define PKT_VLAN_PRESENT_BIT 0
+#endif
+#define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, __pkt_vlan_present_offset)
+ __u8 __pkt_vlan_present_offset[0];
+ __u8 vlan_present:1;
__u8 csum_complete_sw:1;
__u8 csum_level:2;
__u8 csum_not_inet:1;
@@ -784,8 +792,8 @@ struct sk_buff {
#ifdef CONFIG_IPV6_NDISC_NODETYPE
__u8 ndisc_nodetype:2;
#endif
+
__u8 ipvs_property:1;
-
__u8 inner_protocol_type:1;
__u8 remcsum_offload:1;
#ifdef CONFIG_NET_SWITCHDEV
@@ -816,12 +824,6 @@ struct sk_buff {
__u32 priority;
int skb_iif;
__u32 hash;
-#define PKT_VLAN_PRESENT_BIT 4 // CFI (12-th bit) in TCI
-#ifdef __BIG_ENDIAN
-#define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, vlan_tci)
-#else
-#define PKT_VLAN_PRESENT_OFFSET() (offsetof(struct sk_buff, vlan_tci) + 1)
-#endif
__be16 vlan_proto;
__u16 vlan_tci;
#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)
diff --git a/lib/test_bpf.c b/lib/test_bpf.c
index aa22bcaec1dc..f3e570722a7e 100644
--- a/lib/test_bpf.c
+++ b/lib/test_bpf.c
@@ -39,6 +39,7 @@
#define SKB_HASH 0x1234aaab
#define SKB_QUEUE_MAP 123
#define SKB_VLAN_TCI 0xffff
+#define SKB_VLAN_PRESENT 1
#define SKB_DEV_IFINDEX 577
#define SKB_DEV_TYPE 588
@@ -725,8 +726,8 @@ static struct bpf_test tests[] = {
CLASSIC,
{ },
{
- { 1, SKB_VLAN_TCI & ~VLAN_TAG_PRESENT },
- { 10, SKB_VLAN_TCI & ~VLAN_TAG_PRESENT }
+ { 1, SKB_VLAN_TCI },
+ { 10, SKB_VLAN_TCI }
},
},
{
@@ -739,8 +740,8 @@ static struct bpf_test tests[] = {
CLASSIC,
{ },
{
- { 1, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) },
- { 10, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) }
+ { 1, SKB_VLAN_PRESENT },
+ { 10, SKB_VLAN_PRESENT }
},
},
{
@@ -5289,8 +5290,8 @@ static struct bpf_test tests[] = {
#endif
{ },
{
- { 1, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) },
- { 10, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) }
+ { 1, SKB_VLAN_PRESENT },
+ { 10, SKB_VLAN_PRESENT }
},
.fill_helper = bpf_fill_maxinsns6,
.expected_errcode = -ENOTSUPP,
@@ -6493,6 +6494,7 @@ static struct sk_buff *populate_skb(char *buf, int size)
skb->hash = SKB_HASH;
skb->queue_mapping = SKB_QUEUE_MAP;
skb->vlan_tci = SKB_VLAN_TCI;
+ skb->vlan_present = SKB_VLAN_PRESENT;
skb->vlan_proto = htons(ETH_P_IP);
dev_net_set(&dev, &init_net);
skb->dev = &dev;
diff --git a/net/core/filter.c b/net/core/filter.c
index c151b906df53..10acbc00ff6c 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -301,9 +301,6 @@ static u32 convert_skb_access(int skb_field, int dst_reg, int src_reg,
/* dst_reg = *(u16 *) (src_reg + offsetof(vlan_tci)) */
*insn++ = BPF_LDX_MEM(BPF_H, dst_reg, src_reg,
offsetof(struct sk_buff, vlan_tci));
-#ifdef VLAN_TAG_PRESENT
- *insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg, ~VLAN_TAG_PRESENT);
-#endif
break;
case SKF_AD_VLAN_TAG_PRESENT:
*insn++ = BPF_LDX_MEM(BPF_B, dst_reg, src_reg, PKT_VLAN_PRESENT_OFFSET());
@@ -6152,9 +6149,6 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type,
*insn++ = BPF_LDX_MEM(BPF_H, si->dst_reg, si->src_reg,
bpf_target_off(struct sk_buff, vlan_tci, 2,
target_size));
-#ifdef VLAN_TAG_PRESENT
- *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, ~VLAN_TAG_PRESENT);
-#endif
break;
case offsetof(struct __sk_buff, cb[0]) ...
--
2.19.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 0/6] Remove VLAN.CFI overload
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
` (5 preceding siblings ...)
2018-11-10 18:58 ` [PATCH net-next 5/6] net/bpf_jit: SPARC: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
@ 2018-11-10 21:47 ` David Miller
2018-11-17 3:51 ` Alexei Starovoitov
2018-11-19 11:05 ` Daniel Borkmann
2018-11-17 3:26 ` David Miller
7 siblings, 2 replies; 15+ messages in thread
From: David Miller @ 2018-11-10 21:47 UTC (permalink / raw)
To: mirq-linux
Cc: netdev, ast, benh, daniel, jhogan, linux-mips, linuxppc-dev, mpe,
paul.burton, paulus, ralf, sparclinux
From: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date: Sat, 10 Nov 2018 19:58:29 +0100
> Fix BPF code/JITs to allow for separate VLAN_PRESENT flag
> storage and finally move the flag to separate storage in skbuff.
>
> This is final step to make CLAN.CFI transparent to core Linux
> networking stack.
>
> An #ifdef is introduced temporarily to mark fragments masking
> VLAN_TAG_PRESENT. This is removed altogether in the final patch.
Daniel and Alexei, please review.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 0/6] Remove VLAN.CFI overload
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
` (6 preceding siblings ...)
2018-11-10 21:47 ` [PATCH net-next 0/6] Remove VLAN.CFI overload David Miller
@ 2018-11-17 3:26 ` David Miller
7 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2018-11-17 3:26 UTC (permalink / raw)
To: mirq-linux
Cc: netdev, ast, benh, daniel, jhogan, linux-mips, linuxppc-dev, mpe,
paul.burton, paulus, ralf, sparclinux
From: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date: Sat, 10 Nov 2018 19:58:29 +0100
> Fix BPF code/JITs to allow for separate VLAN_PRESENT flag
> storage and finally move the flag to separate storage in skbuff.
>
> This is final step to make CLAN.CFI transparent to core Linux
> networking stack.
>
> An #ifdef is introduced temporarily to mark fragments masking
> VLAN_TAG_PRESENT. This is removed altogether in the final patch.
Series applied, thank you.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 0/6] Remove VLAN.CFI overload
2018-11-10 21:47 ` [PATCH net-next 0/6] Remove VLAN.CFI overload David Miller
@ 2018-11-17 3:51 ` Alexei Starovoitov
2018-11-17 5:11 ` David Miller
2018-11-19 11:05 ` Daniel Borkmann
1 sibling, 1 reply; 15+ messages in thread
From: Alexei Starovoitov @ 2018-11-17 3:51 UTC (permalink / raw)
To: David S. Miller
Cc: Michał Mirosław, Network Development,
Alexei Starovoitov, Benjamin Herrenschmidt, Daniel Borkmann,
jhogan, linux-mips, linuxppc-dev, Michael Ellerman, paul.burton,
Paul Mackerras, Ralf Baechle, sparclinux
On Sat, Nov 10, 2018 at 1:48 PM David Miller <davem@davemloft.net> wrote:
>
> From: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Date: Sat, 10 Nov 2018 19:58:29 +0100
>
> > Fix BPF code/JITs to allow for separate VLAN_PRESENT flag
> > storage and finally move the flag to separate storage in skbuff.
> >
> > This is final step to make CLAN.CFI transparent to core Linux
> > networking stack.
> >
> > An #ifdef is introduced temporarily to mark fragments masking
> > VLAN_TAG_PRESENT. This is removed altogether in the final patch.
>
> Daniel and Alexei, please review.
It was on my todo list.
All reviews got delayed due to LPC.
I guess too late to comment now.
Anyhow I don't see the value in this patch set.
Seems like code churn.
Michal, could you please explain the reasoning?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 0/6] Remove VLAN.CFI overload
2018-11-17 3:51 ` Alexei Starovoitov
@ 2018-11-17 5:11 ` David Miller
0 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2018-11-17 5:11 UTC (permalink / raw)
To: alexei.starovoitov
Cc: mirq-linux, netdev, ast, benh, daniel, jhogan, linux-mips,
linuxppc-dev, mpe, paul.burton, paulus, ralf, sparclinux
From: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Date: Fri, 16 Nov 2018 19:51:55 -0800
> Michal, could you please explain the reasoning?
By treating VLAN.CFI specially as "VLAN TAG PRESENT" we prevent
the usage of certain VLAN ID encodings.
So he's trying to get rid of VLAN_TAG_PRESENT completely and this
was the final patch series necessary to accomplish that.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 0/6] Remove VLAN.CFI overload
2018-11-10 21:47 ` [PATCH net-next 0/6] Remove VLAN.CFI overload David Miller
2018-11-17 3:51 ` Alexei Starovoitov
@ 2018-11-19 11:05 ` Daniel Borkmann
1 sibling, 0 replies; 15+ messages in thread
From: Daniel Borkmann @ 2018-11-19 11:05 UTC (permalink / raw)
To: David Miller, mirq-linux
Cc: netdev, ast, benh, jhogan, linux-mips, linuxppc-dev, mpe,
paul.burton, paulus, ralf, sparclinux
On 11/10/2018 10:47 PM, David Miller wrote:
> From: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Date: Sat, 10 Nov 2018 19:58:29 +0100
>
>> Fix BPF code/JITs to allow for separate VLAN_PRESENT flag
>> storage and finally move the flag to separate storage in skbuff.
>>
>> This is final step to make CLAN.CFI transparent to core Linux
>> networking stack.
>>
>> An #ifdef is introduced temporarily to mark fragments masking
>> VLAN_TAG_PRESENT. This is removed altogether in the final patch.
>
> Daniel and Alexei, please review.
Sorry, was completely swamped due to plumbers, just getting to it now.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI
2018-11-10 18:58 ` [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
@ 2018-11-19 11:26 ` Daniel Borkmann
2018-11-19 20:30 ` Michał Mirosław
0 siblings, 1 reply; 15+ messages in thread
From: Daniel Borkmann @ 2018-11-19 11:26 UTC (permalink / raw)
To: Michał Mirosław, netdev
Cc: Alexei Starovoitov, Benjamin Herrenschmidt, David S. Miller,
James Hogan, linux-mips, linuxppc-dev, Michael Ellerman,
Paul Burton, Paul Mackerras, Ralf Baechle, sparclinux
On 11/10/2018 07:58 PM, Michał Mirosław wrote:
> Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Why you have empty commit messages for non-trivial changes like this in
4 out of 6 of your patches ...
How was it tested on the JITs you were changing? Did you test on both,
big and little endian machines?
> ---
> net/core/filter.c | 40 +++++++++++++++++++++-------------------
> 1 file changed, 21 insertions(+), 19 deletions(-)
>
> diff --git a/net/core/filter.c b/net/core/filter.c
> index e521c5ebc7d1..c151b906df53 100644
> --- a/net/core/filter.c
> +++ b/net/core/filter.c
> @@ -296,22 +296,21 @@ static u32 convert_skb_access(int skb_field, int dst_reg, int src_reg,
> break;
>
> case SKF_AD_VLAN_TAG:
> - case SKF_AD_VLAN_TAG_PRESENT:
> BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2);
> - BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000);
>
> /* dst_reg = *(u16 *) (src_reg + offsetof(vlan_tci)) */
> *insn++ = BPF_LDX_MEM(BPF_H, dst_reg, src_reg,
> offsetof(struct sk_buff, vlan_tci));
> - if (skb_field == SKF_AD_VLAN_TAG) {
> - *insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg,
> - ~VLAN_TAG_PRESENT);
> - } else {
> - /* dst_reg >>= 12 */
> - *insn++ = BPF_ALU32_IMM(BPF_RSH, dst_reg, 12);
> - /* dst_reg &= 1 */
> +#ifdef VLAN_TAG_PRESENT
> + *insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg, ~VLAN_TAG_PRESENT);
> +#endif
> + break;
> + case SKF_AD_VLAN_TAG_PRESENT:
> + *insn++ = BPF_LDX_MEM(BPF_B, dst_reg, src_reg, PKT_VLAN_PRESENT_OFFSET());
> + if (PKT_VLAN_PRESENT_BIT)
> + *insn++ = BPF_ALU32_IMM(BPF_RSH, dst_reg, PKT_VLAN_PRESENT_BIT);
> + if (PKT_VLAN_PRESENT_BIT < 7)
> *insn++ = BPF_ALU32_IMM(BPF_AND, dst_reg, 1);
> - }
> break;
> }
>
> @@ -6140,19 +6139,22 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type,
> break;
>
> case offsetof(struct __sk_buff, vlan_present):
> + *target_size = 1;
> + *insn++ = BPF_LDX_MEM(BPF_B, si->dst_reg, si->src_reg,
> + PKT_VLAN_PRESENT_OFFSET());
> + if (PKT_VLAN_PRESENT_BIT)
> + *insn++ = BPF_ALU32_IMM(BPF_RSH, si->dst_reg, PKT_VLAN_PRESENT_BIT);
> + if (PKT_VLAN_PRESENT_BIT < 7)
> + *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, 1);
> + break;
> +
> case offsetof(struct __sk_buff, vlan_tci):
> - BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000);
> -
> *insn++ = BPF_LDX_MEM(BPF_H, si->dst_reg, si->src_reg,
> bpf_target_off(struct sk_buff, vlan_tci, 2,
> target_size));
> - if (si->off == offsetof(struct __sk_buff, vlan_tci)) {
> - *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg,
> - ~VLAN_TAG_PRESENT);
> - } else {
> - *insn++ = BPF_ALU32_IMM(BPF_RSH, si->dst_reg, 12);
> - *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, 1);
> - }
> +#ifdef VLAN_TAG_PRESENT
> + *insn++ = BPF_ALU32_IMM(BPF_AND, si->dst_reg, ~VLAN_TAG_PRESENT);
> +#endif
> break;
>
> case offsetof(struct __sk_buff, cb[0]) ...
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI
2018-11-19 11:26 ` Daniel Borkmann
@ 2018-11-19 20:30 ` Michał Mirosław
0 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2018-11-19 20:30 UTC (permalink / raw)
To: Daniel Borkmann
Cc: netdev, Alexei Starovoitov, Benjamin Herrenschmidt,
David S. Miller, James Hogan, linux-mips, linuxppc-dev,
Michael Ellerman, Paul Burton, Paul Mackerras, Ralf Baechle,
sparclinux
On Mon, Nov 19, 2018 at 12:26:46PM +0100, Daniel Borkmann wrote:
> On 11/10/2018 07:58 PM, Michał Mirosław wrote:
> > Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
>
> Why you have empty commit messages for non-trivial changes like this in
> 4 out of 6 of your patches ...
>
> How was it tested on the JITs you were changing? Did you test on both,
> big and little endian machines?
I have only x86 boxes currently so didn't try to test others. I hope
upstreaming the series through net-next will allow us to find any
fallouts, if any. The changes are very simple, though: they move
code around (the "splitting" part) and eventually change a vlan_present
flag's position in a skbuff structure. Dependency on CPU endianness is
removed by using byte loads for the flag.
Best Regards,
Michał Mirosław
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net-next 4/6] net/bpf_jit: PPC: split VLAN_PRESENT bit handling from VLAN_TCI
2017-01-04 1:18 [PATCH net-next 0/6] Prepare BPF for VLAN_TAG_PRESENT cleanup Michał Mirosław
@ 2017-01-04 1:18 ` Michał Mirosław
0 siblings, 0 replies; 15+ messages in thread
From: Michał Mirosław @ 2017-01-04 1:18 UTC (permalink / raw)
To: netdev; +Cc: Paul Mackerras, linuxppc-dev
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
arch/powerpc/net/bpf_jit_comp.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index 7e706f36e364..22ae63fb9b7d 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -377,18 +377,19 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
hash));
break;
case BPF_ANC | SKF_AD_VLAN_TAG:
- case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2);
- BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000);
PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
vlan_tci));
- if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) {
- PPC_ANDI(r_A, r_A, ~VLAN_TAG_PRESENT);
- } else {
- PPC_ANDI(r_A, r_A, VLAN_TAG_PRESENT);
- PPC_SRWI(r_A, r_A, 12);
- }
+#ifdef VLAN_TAG_PRESENT
+ PPC_ANDI(r_A, r_A, ~VLAN_TAG_PRESENT);
+#endif
+ break;
+ case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
+ PPC_LBZ_OFFS(r_A, r_skb, PKT_VLAN_PRESENT_OFFSET());
+ if (PKT_VLAN_PRESENT_BIT)
+ PPC_SRWI(r_A, r_A, PKT_VLAN_PRESENT_BIT);
+ PPC_ANDI(r_A, r_A, 1);
break;
case BPF_ANC | SKF_AD_QUEUE:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff,
--
2.11.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2018-11-20 6:56 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-10 18:58 [PATCH net-next 0/6] Remove VLAN.CFI overload Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 1/6] net/skbuff: add macros for VLAN_PRESENT bit Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 2/6] net/bpf: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
2018-11-19 11:26 ` Daniel Borkmann
2018-11-19 20:30 ` Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 3/6] net/bpf_jit: MIPS: " Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 4/6] net/bpf_jit: PPC: " Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 6/6] net: remove VLAN_TAG_PRESENT Michał Mirosław
2018-11-10 18:58 ` [PATCH net-next 5/6] net/bpf_jit: SPARC: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
2018-11-10 21:47 ` [PATCH net-next 0/6] Remove VLAN.CFI overload David Miller
2018-11-17 3:51 ` Alexei Starovoitov
2018-11-17 5:11 ` David Miller
2018-11-19 11:05 ` Daniel Borkmann
2018-11-17 3:26 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2017-01-04 1:18 [PATCH net-next 0/6] Prepare BPF for VLAN_TAG_PRESENT cleanup Michał Mirosław
2017-01-04 1:18 ` [PATCH net-next 4/6] net/bpf_jit: PPC: split VLAN_PRESENT bit handling from VLAN_TCI Michał Mirosław
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).