]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - libexec/tftpd/tftp-utils.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / libexec / tftpd / tftp-utils.h
1 /*
2  * Copyright (C) 2008 Edwin Groothuis. All rights reserved.
3  * 
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  * 
13  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  */
25
26 #include <sys/cdefs.h>
27 __FBSDID("$FreeBSD$");
28
29 /*
30  */
31 #define TIMEOUT         5
32 #define MAX_TIMEOUTS    5
33
34 /* Generic values */
35 #define MAXSEGSIZE      65464           /* Maximum size of the data segment */
36 #define MAXPKTSIZE      (MAXSEGSIZE + 4) /* Maximum size of the packet */
37
38 /* For the blksize option */
39 #define BLKSIZE_MIN     8               /* Minimum size of the data segment */
40 #define BLKSIZE_MAX     MAXSEGSIZE      /* Maximum size of the data segment */
41
42 /* For the timeout option */
43 #define TIMEOUT_MIN     0               /* Minimum timeout value */
44 #define TIMEOUT_MAX     255             /* Maximum timeout value */
45 #define MIN_TIMEOUTS    3
46
47 extern int      timeoutpacket;
48 extern int      timeoutnetwork;
49 extern int      maxtimeouts;
50 int     settimeouts(int timeoutpacket, int timeoutnetwork, int maxtimeouts);
51
52 extern uint16_t segsize;
53 extern uint16_t pktsize;
54
55 extern int      acting_as_client;
56
57 /*
58  */
59 void    unmappedaddr(struct sockaddr_in6 *sin6);
60 ssize_t get_field(int peer, char *buffer, ssize_t size);
61
62 /*
63  * Packet types
64  */
65 struct packettypes {
66         int     value;
67         const char *const name;
68 };
69 extern struct packettypes packettypes[];
70 const char *packettype(int);
71
72 /*
73  * RP_
74  */
75 struct rp_errors {
76         int     error;
77         const char *const desc;
78 };
79 extern struct rp_errors rp_errors[];
80 char    *rp_strerror(int error);
81
82 /*
83  * Debug features
84  */
85 #define DEBUG_NONE      0x0000
86 #define DEBUG_PACKETS   0x0001
87 #define DEBUG_SIMPLE    0x0002
88 #define DEBUG_OPTIONS   0x0004
89 #define DEBUG_ACCESS    0x0008
90 struct debugs {
91         int     value;
92         const char *const name;
93         const char *const desc;
94 };
95 extern int      debug;
96 extern struct debugs debugs[];
97 extern int      packetdroppercentage;
98 int     debug_find(char *s);
99 int     debug_finds(char *s);
100 const char *debug_show(int d);
101
102 /*
103  * Log routines
104  */
105 #define DEBUG(s) tftp_log(LOG_DEBUG, "%s", s)
106 extern int tftp_logtostdout;
107 void    tftp_openlog(const char *ident, int logopt, int facility);
108 void    tftp_closelog(void);
109 void    tftp_log(int priority, const char *message, ...) __printflike(2, 3);
110
111 /*
112  * Performance figures
113  */
114 struct tftp_stats {
115         size_t          amount;
116         int             rollovers;
117         uint32_t        blocks;
118         int             retries;
119         struct timeval  tstart;
120         struct timeval  tstop;
121 };
122
123 void    stats_init(struct tftp_stats *ts);
124 void    printstats(const char *direction, int verbose, struct tftp_stats *ts);