1 /*  ipguard.h
2  *
3  * Copyright (c) 2010 SeaD <sead at deep.perm.ru>
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  *  $Id: ipguard.h,v 1.17 2010/07/12 03:46:36 sead Exp $
27  *
28  */
29 
30 #ifndef _IPGUARD_H
31 #define _IPGUARD_H 1
32 
33 #include <stdlib.h>
34 #include <stdio.h>
35 #include <string.h>
36 #include <unistd.h>
37 #include <errno.h>
38 
39 #include <limits.h>             /* PATH_MAX */
40 
41 #define IP_ADDR_LEN     4
42 #ifndef IFNAMSIZ
43 # define IFNAMSIZ       16
44 #endif
45 #ifndef MAXLOGNAME
46 # define MAXLOGNAME     16
47 #endif
48 
49 #define NAME            "ipguard"
50 #define VERSION         "1.04"
51 #define AUTHOR          "SeaD"
52 #define MAIL            "sead at deep.perm.ru"
53 
54 #define ETHERSFILE      ETHERS
55 #define LOGNAME         "/var/log/ipguard"
56 #define PIDNAME         "/var/run/ipguard"
57 #define FAKEMAC         "de:ad:xx:xx:xx:xx"
58 #define PCAPFSIZ        128
59 
60 #define ETHERSTO        0
61 #define FAKEREGEN       0
62 #define FAKENUM         2
63 #define FAKETIME        50      /* milliseconds */
64 #define BUFSIZE         10
65 
66 #define ERROR           1
67 #define WARNING         2
68 #define NOTICE          3
69 #define INFO            4
70 
71 char iface[IFNAMSIZ];
72 char ethers_name[PATH_MAX];
73 char log_name[PATH_MAX];
74 char pid_name[PATH_MAX];
75 char fmac[18];
76 char pcapf[PCAPFSIZ];
77 char suser[MAXLOGNAME];
78 int ethers_update;
79 int fake_regen;
80 int fake_num;
81 int fake_time;
82 int buffer_num;
83 int addr_nosubst;
84 int nofirst;
85 int grant;
86 int read_only;
87 int duplex;
88 int fixbc;
89 int hidden;
90 int promisc;
91 int debug;
92 int verbose;
93 
94 unsigned int all, good, grat, wgrat, zmac, zip, bad, bmac, bsip, btip,
95     bnew, bgrat, mymac, fake, pfake, nzh, nbe, mis;
96 char pfmac[18];
97 char s[128+1];
98 
99 /*  ethers.c
100  */
101 void ethers_init(void);
102 void ethers_reinit(void);
103 
104 /*  packet.c
105  */
106 void buffer_dump(void);
107 void buffer_dump2ethers(void);
108 void pair_init(void);
109 void pair_destroy (void);
110 void pair_add(char *mac, char *ip);
111 void pair_dump(void);
112 void packet_init(char *iface);
113 void packet_destroy (void);
114 void packet_recv(void);
115 void stat_dump(void);
116 
117 /*  system.c
118  */
119 void exit_ipguard(int reason);
120 void sig_init(void);
121 void sig_func(int signal);
122 void sig_catch(void);
123 void log_open(void);
124 void log_str(int pri, char *ent, char *err);
125 void log_close(void);
126 void log_reopen(void);
127 void pid_creat(void);
128 void pid_unlink(void);
129 void daemonize(void);
130 void set_user(void);
131 void mac_rand(char *mac);
132 void mac_regen(char *mac);
133 char *time_get(void);
134 void ethers_stat(void);
135 
136 #endif  /* _IPGUARD_H */
137