fw.h revision 6017:7e310503019e
16892SBrad.Beckmann@amd.com/*
26892SBrad.Beckmann@amd.com * fw.h
36892SBrad.Beckmann@amd.com *
46892SBrad.Beckmann@amd.com * Network firewalling operations.
56892SBrad.Beckmann@amd.com *
66892SBrad.Beckmann@amd.com * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
76892SBrad.Beckmann@amd.com *
86892SBrad.Beckmann@amd.com * $Id: fw.h,v 1.13 2002/12/14 04:02:36 dugsong Exp $
96892SBrad.Beckmann@amd.com */
106892SBrad.Beckmann@amd.com
116892SBrad.Beckmann@amd.com#ifndef DNET_FW_H
126892SBrad.Beckmann@amd.com#define DNET_FW_H
136892SBrad.Beckmann@amd.com
146892SBrad.Beckmann@amd.comstruct fw_rule {
156892SBrad.Beckmann@amd.com        char		fw_device[INTF_NAME_LEN]; /* interface name */
166892SBrad.Beckmann@amd.com        uint8_t		fw_op;			  /* operation */
176892SBrad.Beckmann@amd.com        uint8_t		fw_dir;			  /* direction */
186892SBrad.Beckmann@amd.com        uint8_t		fw_proto;		  /* IP protocol */
196892SBrad.Beckmann@amd.com        struct addr	fw_src;			  /* src address / net */
206892SBrad.Beckmann@amd.com        struct addr	fw_dst;			  /* dst address / net */
216892SBrad.Beckmann@amd.com        uint16_t	fw_sport[2];		  /* range / ICMP type */
226892SBrad.Beckmann@amd.com        uint16_t	fw_dport[2];		  /* range / ICMP code */
236892SBrad.Beckmann@amd.com};
246892SBrad.Beckmann@amd.com
256892SBrad.Beckmann@amd.com#define FW_OP_ALLOW	1
266892SBrad.Beckmann@amd.com#define FW_OP_BLOCK	2
276892SBrad.Beckmann@amd.com
286892SBrad.Beckmann@amd.com#define FW_DIR_IN	1
296892SBrad.Beckmann@amd.com#define FW_DIR_OUT	2
307564SBrad.Beckmann@amd.com
316892SBrad.Beckmann@amd.com#define fw_pack_rule(rule, dev, op, dir, p, s, d, sp1, sp2, dp1, dp2)	\
326892SBrad.Beckmann@amd.comdo {									\
336892SBrad.Beckmann@amd.com        strlcpy((rule)->fw_device, dev, sizeof((rule)->fw_device));	\
349100SBrad.Beckmann@amd.com        (rule)->fw_op = op; (rule)->fw_dir = dir;			\
356892SBrad.Beckmann@amd.com        (rule)->fw_proto = p;						\
366892SBrad.Beckmann@amd.com        memmove(&(rule)->fw_src, &(s), sizeof((rule)->fw_src));		\
376892SBrad.Beckmann@amd.com        memmove(&(rule)->fw_dst, &(d), sizeof((rule)->fw_dst));		\
386892SBrad.Beckmann@amd.com        (rule)->fw_sport[0] = sp1; (rule)->fw_sport[1] = sp2;		\
396892SBrad.Beckmann@amd.com        (rule)->fw_dport[0] = dp1; (rule)->fw_dport[1] = dp2;		\
407551SBrad.Beckmann@amd.com} while (0)
416892SBrad.Beckmann@amd.com
426892SBrad.Beckmann@amd.comtypedef struct fw_handle fw_t;
436892SBrad.Beckmann@amd.com
446892SBrad.Beckmann@amd.comtypedef int (*fw_handler)(const struct fw_rule *rule, void *arg);
456892SBrad.Beckmann@amd.com
467551SBrad.Beckmann@amd.com__BEGIN_DECLS
476892SBrad.Beckmann@amd.comfw_t	*fw_open(void);
487564SBrad.Beckmann@amd.comint	 fw_add(fw_t *f, const struct fw_rule *rule);
497564SBrad.Beckmann@amd.comint	 fw_delete(fw_t *f, const struct fw_rule *rule);
507564SBrad.Beckmann@amd.comint	 fw_loop(fw_t *f, fw_handler callback, void *arg);
517564SBrad.Beckmann@amd.comfw_t	*fw_close(fw_t *f);
527564SBrad.Beckmann@amd.com__END_DECLS
537564SBrad.Beckmann@amd.com
547538SBrad.Beckmann@amd.com#endif /* DNET_FW_H */
557561SBrad.Beckmann@amd.com