summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/net/bpf_jitter.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-11-06 16:20:21 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-11-11 10:08:08 +0100
commit66659ff1ad6831b0ea7425fa6ecd8a8687523658 (patch)
tree48e22b475fa8854128e0861a33fed6f78c8094b5 /freebsd/sys/net/bpf_jitter.c
parentDefine __GLOBL1() and __GLOBL() (diff)
downloadrtems-libbsd-66659ff1ad6831b0ea7425fa6ecd8a8687523658.tar.bz2
Update to FreeBSD 9.2
Diffstat (limited to 'freebsd/sys/net/bpf_jitter.c')
-rw-r--r--freebsd/sys/net/bpf_jitter.c62
1 files changed, 21 insertions, 41 deletions
diff --git a/freebsd/sys/net/bpf_jitter.c b/freebsd/sys/net/bpf_jitter.c
index cd4d7d2b..e3d91e85 100644
--- a/freebsd/sys/net/bpf_jitter.c
+++ b/freebsd/sys/net/bpf_jitter.c
@@ -2,7 +2,7 @@
/*-
* Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim <jkim@FreeBSD.org>
+ * Copyright (C) 2005-2009 Jung-uk Kim <jkim@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,14 +44,15 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
#else
#include <stdlib.h>
-#include <string.h>
+#include <sys/mman.h>
+#include <rtems/bsd/sys/param.h>
#include <rtems/bsd/sys/types.h>
#endif
#include <net/bpf.h>
#include <net/bpf_jitter.h>
-bpf_filter_func bpf_jit_compile(struct bpf_insn *, u_int, int *);
+bpf_filter_func bpf_jit_compile(struct bpf_insn *, u_int, size_t *);
static u_int bpf_jit_accept_all(u_char *, u_int, u_int);
@@ -62,27 +63,36 @@ SYSCTL_NODE(_net, OID_AUTO, bpf_jitter, CTLFLAG_RW, 0, "BPF JIT compiler");
int bpf_jitter_enable = 1;
SYSCTL_INT(_net_bpf_jitter, OID_AUTO, enable, CTLFLAG_RW,
&bpf_jitter_enable, 0, "enable BPF JIT compiler");
+#endif
bpf_jit_filter *
bpf_jitter(struct bpf_insn *fp, int nins)
{
bpf_jit_filter *filter;
- /* Allocate the filter structure */
+ /* Allocate the filter structure. */
+#ifdef _KERNEL
filter = (struct bpf_jit_filter *)malloc(sizeof(*filter),
- M_BPFJIT, M_NOWAIT | M_ZERO);
+ M_BPFJIT, M_NOWAIT);
+#else
+ filter = (struct bpf_jit_filter *)malloc(sizeof(*filter));
+#endif
if (filter == NULL)
return (NULL);
- /* No filter means accept all */
+ /* No filter means accept all. */
if (fp == NULL || nins == 0) {
filter->func = bpf_jit_accept_all;
return (filter);
}
- /* Create the binary */
- if ((filter->func = bpf_jit_compile(fp, nins, filter->mem)) == NULL) {
+ /* Create the binary. */
+ if ((filter->func = bpf_jit_compile(fp, nins, &filter->size)) == NULL) {
+#ifdef _KERNEL
free(filter, M_BPFJIT);
+#else
+ free(filter);
+#endif
return (NULL);
}
@@ -93,46 +103,16 @@ void
bpf_destroy_jit_filter(bpf_jit_filter *filter)
{
+#ifdef _KERNEL
if (filter->func != bpf_jit_accept_all)
free(filter->func, M_BPFJIT);
free(filter, M_BPFJIT);
-}
#else
-bpf_jit_filter *
-bpf_jitter(struct bpf_insn *fp, int nins)
-{
- bpf_jit_filter *filter;
-
- /* Allocate the filter structure */
- filter = (struct bpf_jit_filter *)malloc(sizeof(*filter));
- if (filter == NULL)
- return (NULL);
- memset(filter, 0, sizeof(*filter));
-
- /* No filter means accept all */
- if (fp == NULL || nins == 0) {
- filter->func = bpf_jit_accept_all;
- return (filter);
- }
-
- /* Create the binary */
- if ((filter->func = bpf_jit_compile(fp, nins, filter->mem)) == NULL) {
- free(filter);
- return (NULL);
- }
-
- return (filter);
-}
-
-void
-bpf_destroy_jit_filter(bpf_jit_filter *filter)
-{
-
if (filter->func != bpf_jit_accept_all)
- free(filter->func);
+ munmap(filter->func, filter->size);
free(filter);
-}
#endif
+}
static u_int
bpf_jit_accept_all(__unused u_char *p, __unused u_int wirelen,