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.
                                 */

Reply via email to