1 /*
2 * Copyright (C) 1997-2003 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id: ip_log.c,v 2.75.2.7 2005/06/11 07:47:44 darrenr Exp $
7 *
8 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
9 * Use is subject to license terms.
10 *
11 * Copyright (c) 2014, Joyent, Inc. All rights reserved.
12 */
13
14 #include <sys/param.h>
15 #if defined(KERNEL) || defined(_KERNEL)
16 # undef KERNEL
17 # undef _KERNEL
18 # define KERNEL 1
19 # define _KERNEL 1
20 #endif
21 #if defined(__NetBSD__) && (NetBSD >= 199905) && !defined(IPFILTER_LKM) && \
22 defined(_KERNEL)
23 # include "opt_ipfilter_log.h"
24 #endif
25 #if defined(__FreeBSD__) && !defined(IPFILTER_LKM)
26 # if defined(_KERNEL)
27 # if defined(__FreeBSD_version) && (__FreeBSD_version >= 300000)
28 # include "opt_ipfilter.h"
29 # endif
30 # else
31 # include <osreldate.h>
363 mlen = (flags & FR_LOGBODY) ? MIN(mlen, 128) : 0;
364 } else if ((flags & FR_LOGBODY) == 0) {
365 mlen = 0;
366 }
367 if (mlen < 0)
368 mlen = 0;
369 ipfl.fl_plen = (u_char)mlen;
370 ipfl.fl_hlen = (u_char)hlen;
371 ipfl.fl_rule = fin->fin_rule;
372 (void) strncpy(ipfl.fl_group, fin->fin_group, FR_GROUPLEN);
373 if (fin->fin_fr != NULL) {
374 ipfl.fl_loglevel = fin->fin_fr->fr_loglevel;
375 ipfl.fl_logtag = fin->fin_fr->fr_logtag;
376 } else {
377 ipfl.fl_loglevel = 0xffff;
378 ipfl.fl_logtag = FR_NOLOGTAG;
379 }
380 if (fin->fin_nattag != NULL)
381 bcopy(fin->fin_nattag, (void *)&ipfl.fl_nattag,
382 sizeof(ipfl.fl_nattag));
383 ipfl.fl_flags = flags;
384 ipfl.fl_dir = fin->fin_out;
385 ipfl.fl_lflags = fin->fin_flx;
386 ptrs[0] = (void *)&ipfl;
387 sizes[0] = sizeof(ipfl);
388 types[0] = 0;
389 # if defined(MENTAT) && defined(_KERNEL)
390 /*
391 * Are we copied from the mblk or an aligned array ?
392 */
393 if (fin->fin_ip == (ip_t *)m->b_rptr) {
394 ptrs[1] = m;
395 sizes[1] = hlen + mlen;
396 types[1] = 1;
397 } else {
398 ptrs[1] = fin->fin_ip;
399 sizes[1] = hlen + mlen;
400 types[1] = 0;
401 }
402 # else
|
1 /*
2 * Copyright (C) 1997-2003 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id: ip_log.c,v 2.75.2.7 2005/06/11 07:47:44 darrenr Exp $
7 *
8 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
9 * Use is subject to license terms.
10 *
11 * Copyright 2019 Joyent, Inc.
12 */
13
14 #include <sys/param.h>
15 #if defined(KERNEL) || defined(_KERNEL)
16 # undef KERNEL
17 # undef _KERNEL
18 # define KERNEL 1
19 # define _KERNEL 1
20 #endif
21 #if defined(__NetBSD__) && (NetBSD >= 199905) && !defined(IPFILTER_LKM) && \
22 defined(_KERNEL)
23 # include "opt_ipfilter_log.h"
24 #endif
25 #if defined(__FreeBSD__) && !defined(IPFILTER_LKM)
26 # if defined(_KERNEL)
27 # if defined(__FreeBSD_version) && (__FreeBSD_version >= 300000)
28 # include "opt_ipfilter.h"
29 # endif
30 # else
31 # include <osreldate.h>
363 mlen = (flags & FR_LOGBODY) ? MIN(mlen, 128) : 0;
364 } else if ((flags & FR_LOGBODY) == 0) {
365 mlen = 0;
366 }
367 if (mlen < 0)
368 mlen = 0;
369 ipfl.fl_plen = (u_char)mlen;
370 ipfl.fl_hlen = (u_char)hlen;
371 ipfl.fl_rule = fin->fin_rule;
372 (void) strncpy(ipfl.fl_group, fin->fin_group, FR_GROUPLEN);
373 if (fin->fin_fr != NULL) {
374 ipfl.fl_loglevel = fin->fin_fr->fr_loglevel;
375 ipfl.fl_logtag = fin->fin_fr->fr_logtag;
376 } else {
377 ipfl.fl_loglevel = 0xffff;
378 ipfl.fl_logtag = FR_NOLOGTAG;
379 }
380 if (fin->fin_nattag != NULL)
381 bcopy(fin->fin_nattag, (void *)&ipfl.fl_nattag,
382 sizeof(ipfl.fl_nattag));
383 bcopy(fin->fin_fr->fr_uuid, ipfl.fl_uuid, sizeof (ipfl.fl_uuid));
384 ipfl.fl_flags = flags;
385 ipfl.fl_dir = fin->fin_out;
386 ipfl.fl_lflags = fin->fin_flx;
387 ptrs[0] = (void *)&ipfl;
388 sizes[0] = sizeof(ipfl);
389 types[0] = 0;
390 # if defined(MENTAT) && defined(_KERNEL)
391 /*
392 * Are we copied from the mblk or an aligned array ?
393 */
394 if (fin->fin_ip == (ip_t *)m->b_rptr) {
395 ptrs[1] = m;
396 sizes[1] = hlen + mlen;
397 types[1] = 1;
398 } else {
399 ptrs[1] = fin->fin_ip;
400 sizes[1] = hlen + mlen;
401 types[1] = 0;
402 }
403 # else
|