2 * Encrypting tunnel for userv-ipif tunnels, header file
5 * Copyright (C) 2000,2003 Ian Jackson
6 * This file is part of ipif, part of userv-utils
8 * This is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with userv-utils; if not, write to the Free Software
20 * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 #include <sys/utsname.h>
39 typedef void mes_functype(struct mechdata **md_r, int *maxprefix_io, int *maxsuffix_io);
40 typedef void mds_functype(struct mechdata **md_r);
42 typedef void menc_functype(struct mechdata *md, struct buffer*);
43 typedef const char *mdec_functype(struct mechdata *md, struct buffer*);
47 mes_functype *encsetup;
48 mds_functype *decsetup;
49 menc_functype *encode;
50 mdec_functype *decode;
55 extern const struct mechanism *const mechanismlists[];
57 /* setup function may call getarg_xxx functions and then
58 * reads/writes key material to/from fd
60 * setup_in function may increase maxprefix and maxsuffix
61 * code functions modify buffer in place
62 * decode function returns 0 meaning packet decoded ok,
63 * "" meaning discard it quietly, or message to print for verbose discard
66 const char *getarg_string(void);
67 unsigned long getarg_ulong(void);
69 #define PROGRAM "udptunnel-forwarder"
70 extern char programid[];
72 void *buf_append(struct buffer *buf, size_t amount);
73 void *buf_prepend(struct buffer *buf, size_t amount);
74 void *buf_unappend(struct buffer *buf, size_t amount); /* may give 0 */
75 void *buf_unprepend(struct buffer *buf, size_t amount); /* may give 0 */
77 void sysfail(const char *msg);
78 void fail(const char *msg);
79 void sysdiag(const char *msg);
80 void diag(const char *msg);
82 extern const char *const *argv;
85 void *xmalloc(size_t sz);
86 void get_random(void *ptr, size_t sz);
87 void random_key(void *ptr, size_t sz);
88 void write_must(int fd, const void *p_in, int sz, const char *what);
89 void read_must(int fd, void *p_in, int sz, const char *what);
91 void arg_assert_fail(const char *msg);
92 #define arg_assert(v) (v ? (void)0 : arg_assert_fail(#v))
94 #define XMALLOC(variable) ((variable)= xmalloc(sizeof(*(variable))))
96 #define BUF_UNSOMEEND(var,buf,sz,whichend) \
97 do { var= whichend(buf,sz); if (!var) return "message truncated"; } while(0)
98 #define BUF_UNAPPEND(var,buf,sz) BUF_UNSOMEEND(var,buf,sz,buf_unappend)
99 #define BUF_UNPREPEND(var,buf,sz) BUF_UNSOMEEND(var,buf,sz,buf_unprepend)
101 #define STANDARD_MECHANISMLIST(mechstring,filename) \
102 const struct mechanism mechlist_##filename []= { \
103 STANDARD_MECHANISM(mechstring,filename) \
107 #define STANDARD_MECHANISM(mechstring,mechname) \
108 { mechstring, mes_##mechname, mds_##mechname, menc_##mechname, mdec_##mechname },