Print this page
OS-7667 IPFilter needs to keep and report state for cloud firewall logging
Portions contributed by: Mike Gerdts <mike.gerdts@joyent.com>
   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