--- fwsync/driver/fwsync.h 2022/06/22 13:01:55 1.1 +++ fwsync/driver/fwsync.h 2022/08/26 14:47:36 1.11 @@ -1,7 +1,29 @@ -/************************************************************************* -* (C) 2022 CloudSigma AG - Sofia/Bulgaria -* by Michael Pounov -**************************************************************************/ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2022 Michael Pounov , CloudSigma AG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ #ifndef __FWSYNC_H #define __FWSYNC_H @@ -21,9 +43,18 @@ #include #include #include +#include #include +#include +#include +#include #include #include + +#include +#include +#include + #include #include #include @@ -31,33 +62,16 @@ #include #include #include - -#define IPFW_INTERNAL - #include + #include #include "fwsync_proto.h" #include "fwsync_workers.h" -#if 0 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif - - #define IFT_FWSYNC 0xfc +#define IFT_FWSYNC_ACCT 0xfd #define DRV_NAME "fwsync" #define DRV_VERSION 1 @@ -134,44 +148,28 @@ struct fwsync_context { #define CTX_COLLECTOR_1_ONLINE 0x80 #define CTX_COLLECTOR_2_ONLINE 0x100 -#if 0 +struct fws_sndpkt { + struct fws_proto sp_proto; + TAILQ_ENTRY(fws_sndpkt) sp_next; +}; -#define DRV_PKTSTART 0xDEADBEEF -#define DRV_PKTEND 0xDEBADEBA +typedef TAILQ_HEAD(, fws_sndpkt) fwsync_sndpkt_t; -#define DRETFLUSH _IOW('D', 1, u_char) -#define DRETADDFILT _IOW('D', 2, struct dret_filter) -#define DRETDELFILT _IOW('D', 3, struct dret_filter) -#define DRETACCTFLUSH _IOW('D', 4, u_char) -#define DRETACCTDEL _IOW('D', 5, struct tagAccount) -#define DRETACCTGET _IOWR('D', 6, struct tagAccount) - -#define DRETDIROFF 0 -#define DRETDIRIN 1 -#define DRETDIROUT 2 -#define DRETDIRANY 3 -#define DRETACCT 4 - -struct dret_filter { - u_char filt_dir; - u_int filt_proto[8]; - char filt_iface[IFNAMSIZ]; - netaddr_t filt_net; +struct fws_acct { + uint64_t states[2]; + uint64_t aliases[2]; }; -#define FP_MASK(n) ((u_int) 1 << ((n) % 32)) -#define FP_ISSET(n, a) ((a)[(n) / 32] & FP_MASK(n)) -#define FP_CLR(n, a) ((a)[(n) / 32] &= ~FP_MASK(n)) -#define FP_SET(n, a) ((a)[(n) / 32] |= FP_MASK(n)) -#define FP_ZERO(a) do { int _i = 8; \ - while (_i > 0) \ - (a)[--_i] = 0; \ - } while (0) -#endif extern int fwsync_debug; extern struct fwsync_context fws_ctx; extern struct cfg_sync fws_cfg; extern struct task fws_sndpkt_task; +extern struct taskqueue *fws_tq; +extern struct callout fws_co; +extern struct mtx fws_mtx_c, fws_mtx_e, fws_mtx_u, fws_mtx_n; +extern struct mbuf *fws_sndpkt; +extern fwsync_sndpkt_t fwsync_sndpkt, fwsync_updpkt, fwsync_natpkt; +extern struct fws_acct fws_acct; int fwsync_cfg(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd); int fwsync_destroy(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd);