On Nov 12, 2025, at 10:13 AM, Guy Harris <[email protected]> wrote:
> On Nov 12, 2025, at 4:07 AM, David Gwynne <[email protected]> wrote:
>
>> i'll put the ops in when i get a chance in the next few days.
>
> Thanks!
Here's an updated patch, with the BIOCLOCK changes to bpf.4 removed, as I
prefer Theo's rewrite.
Index: share/man/man4/bpf.4
===================================================================
RCS file: /cvs/src/share/man/man4/bpf.4,v
retrieving revision 1.47
diff -u -r1.47 bpf.4
--- share/man/man4/bpf.4 15 Aug 2024 12:20:20 -0000 1.47
+++ share/man/man4/bpf.4 13 Nov 2025 00:21:35 -0000
@@ -789,6 +789,12 @@
.Sm on
A <- A / k
.Sm off
+.It Xo Dv BPF_ALU No + BPF_MOD No +
+.Dv BPF_K
+.Xc
+.Sm on
+A <- A % k
+.Sm off
.It Xo Dv BPF_ALU No + BPF_AND No +
.Dv BPF_K
.Xc
@@ -801,6 +807,12 @@
.Sm on
A <- A | k
.Sm off
+.It Xo Dv BPF_ALU No + BPF_XOR No +
+.Dv BPF_K
+.Xc
+.Sm on
+A <- A ^ k
+.Sm off
.It Xo Dv BPF_ALU No + BPF_LSH No +
.Dv BPF_K
.Xc
@@ -837,6 +849,12 @@
.Sm on
A <- A / X
.Sm off
+.It Xo Dv BPF_ALU No + BPF_MOD No +
+.Dv BPF_X
+.Xc
+.Sm on
+A <- A % X
+.Sm off
.It Xo Dv BPF_ALU No + BPF_AND No +
.Dv BPF_X
.Xc
@@ -848,6 +866,12 @@
.Xc
.Sm on
A <- A | X
+.Sm off
+.It Xo Dv BPF_ALU No + BPF_XOR No +
+.Dv BPF_X
+.Xc
+.Sm on
+A <- A ^ X
.Sm off
.It Xo Dv BPF_ALU No + BPF_LSH No +
.Dv BPF_X
Index: sys/net/bpf.h
===================================================================
RCS file: /cvs/src/sys/net/bpf.h,v
retrieving revision 1.74
diff -u -r1.74 bpf.h
--- sys/net/bpf.h 4 Mar 2025 01:01:25 -0000 1.74
+++ sys/net/bpf.h 13 Nov 2025 00:21:42 -0000
@@ -255,6 +255,8 @@
#define BPF_LSH 0x60
#define BPF_RSH 0x70
#define BPF_NEG 0x80
+#define BPF_MOD 0x90
+#define BPF_XOR 0xa0
#define BPF_JA 0x00
#define BPF_JEQ 0x10
#define BPF_JGT 0x20
Index: sys/net/bpf_filter.c
===================================================================
RCS file: /cvs/src/sys/net/bpf_filter.c,v
retrieving revision 1.35
diff -u -r1.35 bpf_filter.c
--- sys/net/bpf_filter.c 7 Jul 2025 02:28:50 -0000 1.35
+++ sys/net/bpf_filter.c 13 Nov 2025 00:21:42 -0000
@@ -307,6 +307,12 @@
A /= X;
continue;
+ case BPF_ALU|BPF_MOD|BPF_X:
+ if (X == 0)
+ return 0;
+ A %= X;
+ continue;
+
case BPF_ALU|BPF_AND|BPF_X:
A &= X;
continue;
@@ -315,6 +321,10 @@
A |= X;
continue;
+ case BPF_ALU|BPF_XOR|BPF_X:
+ A ^= X;
+ continue;
+
case BPF_ALU|BPF_LSH|BPF_X:
A <<= X;
continue;
@@ -339,6 +349,10 @@
A /= pc->k;
continue;
+ case BPF_ALU|BPF_MOD|BPF_K:
+ A %= pc->k;
+ continue;
+
case BPF_ALU|BPF_AND|BPF_K:
A &= pc->k;
continue;
@@ -347,6 +361,10 @@
A |= pc->k;
continue;
+ case BPF_ALU|BPF_XOR|BPF_K:
+ A ^= pc->k;
+ continue;
+
case BPF_ALU|BPF_LSH|BPF_K:
A <<= pc->k;
continue;
@@ -432,12 +450,14 @@
case BPF_SUB:
case BPF_MUL:
case BPF_OR:
+ case BPF_XOR:
case BPF_AND:
case BPF_LSH:
case BPF_RSH:
case BPF_NEG:
break;
case BPF_DIV:
+ case BPF_MOD:
/*
* Check for constant division by 0.
*/