Print this page
OS-5549 move bpf filter functions into ip module
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Approved by: Jerry Jelinek <jerry.jelinek@joyent.com>
        
@@ -19,11 +19,11 @@
  * CDDL HEADER END
  */
 
 /*
  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2015 Joyent, Inc. All rights reserved.
+ * Copyright 2016 Joyent, Inc.
  */
 
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -49,10 +49,11 @@
 #include <sys/dls.h>
 #include <sys/mac.h>
 #include <sys/mac_client.h>
 #include <sys/mac_provider.h>
 #include <sys/mac_client_priv.h>
+#include <inet/bpf.h>
 
 #include <netpacket/packet.h>
 
 static void pfp_close(mac_handle_t, mac_client_handle_t);
 static int pfp_dl_to_arphrd(int);
@@ -446,11 +447,11 @@
                 } else {
                         buflen = 0;
                         buffer = (uchar_t *)mp;
                 }
                 rw_enter(&ps->ps_bpflock, RW_READER);
-                if (bpf_filter(ps->ps_bpf.bf_insns, buffer,
+                if (ip_bpf_filter((ip_bpf_insn_t *)ps->ps_bpf.bf_insns, buffer,
                     hdr.mhi_pktsize, buflen) == 0) {
                         rw_exit(&ps->ps_bpflock);
                         ps->ps_stats.tp_drops++;
                         ks_stats.kp_recv_filtered.value.ui64++;
                         freemsg(mp);
@@ -1334,11 +1335,11 @@
 static int
 pfp_setsocket_sockopt(sock_lower_handle_t handle, int option_name,
     const void *optval, socklen_t optlen)
 {
         struct bpf_program prog;
-        struct bpf_insn *fcode;
+        ip_bpf_insn_t *fcode;
         struct pfpsock *ps;
         struct sock_proto_props sopp;
         int error = 0;
         int size;
 
@@ -1368,14 +1369,14 @@
                 if (ddi_copyin(prog.bf_insns, fcode, size, 0) != 0) {
                         kmem_free(fcode, size);
                         return (EFAULT);
                 }
 
-                if (bpf_validate(fcode, (int)prog.bf_len)) {
+                if (ip_bpf_validate(fcode, prog.bf_len)) {
                         rw_enter(&ps->ps_bpflock, RW_WRITER);
                         pfp_release_bpf(ps);
-                        ps->ps_bpf.bf_insns = fcode;
+                        ps->ps_bpf.bf_insns = (struct bpf_insn *)fcode;
                         ps->ps_bpf.bf_len = size;
                         rw_exit(&ps->ps_bpflock);
 
                         return (0);
                 }