/*
 * fw.h
 *
 * Network firewalling operations.
 *
 * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
 *
 * $Id: fw.h,v 1.13 2002/12/14 04:02:36 dugsong Exp $
 */

#ifndef DNET_FW_H
#define DNET_FW_H

struct fw_rule {
        char		fw_device[INTF_NAME_LEN]; /* interface name */
        uint8_t		fw_op;			  /* operation */
        uint8_t		fw_dir;			  /* direction */
        uint8_t		fw_proto;		  /* IP protocol */
        struct addr	fw_src;			  /* src address / net */
        struct addr	fw_dst;			  /* dst address / net */
        uint16_t	fw_sport[2];		  /* range / ICMP type */
        uint16_t	fw_dport[2];		  /* range / ICMP code */
};

#define FW_OP_ALLOW	1
#define FW_OP_BLOCK	2

#define FW_DIR_IN	1
#define FW_DIR_OUT	2

#define fw_pack_rule(rule, dev, op, dir, p, s, d, sp1, sp2, dp1, dp2)	\
do {									\
        strlcpy((rule)->fw_device, dev, sizeof((rule)->fw_device));	\
        (rule)->fw_op = op; (rule)->fw_dir = dir;			\
        (rule)->fw_proto = p;						\
        memmove(&(rule)->fw_src, &(s), sizeof((rule)->fw_src));		\
        memmove(&(rule)->fw_dst, &(d), sizeof((rule)->fw_dst));		\
        (rule)->fw_sport[0] = sp1; (rule)->fw_sport[1] = sp2;		\
        (rule)->fw_dport[0] = dp1; (rule)->fw_dport[1] = dp2;		\
} while (0)

typedef struct fw_handle fw_t;

typedef int (*fw_handler)(const struct fw_rule *rule, void *arg);

__BEGIN_DECLS
fw_t	*fw_open(void);
int	 fw_add(fw_t *f, const struct fw_rule *rule);
int	 fw_delete(fw_t *f, const struct fw_rule *rule);
int	 fw_loop(fw_t *f, fw_handler callback, void *arg);
fw_t	*fw_close(fw_t *f);
__END_DECLS

#endif /* DNET_FW_H */
