diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-11-06 16:20:21 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-11-11 10:08:08 +0100 |
commit | 66659ff1ad6831b0ea7425fa6ecd8a8687523658 (patch) | |
tree | 48e22b475fa8854128e0861a33fed6f78c8094b5 /freebsd/sys/net/bpf_jitter.c | |
parent | Define __GLOBL1() and __GLOBL() (diff) | |
download | rtems-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.c | 62 |
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, |