Update relayd to 5.0.20110907
FreeBSD port is now developed at https://github.com/mmatuska/relayd
This commit is contained in:
parent
4075117e52
commit
b6ec62db23
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=281379
@ -5,10 +5,11 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
PORTNAME= relayd
|
PORTNAME= relayd
|
||||||
PORTVERSION= 4.9.20110526
|
PORTVERSION= 5.0.20110907
|
||||||
PORTREVISION= 2
|
|
||||||
CATEGORIES= net
|
CATEGORIES= net
|
||||||
MASTER_SITES= ${MASTER_SITE_LOCAL}
|
MASTER_SITES= https://github.com/downloads/mmatuska/relayd/
|
||||||
|
|
||||||
|
FETCH_ARGS= -pRr
|
||||||
MASTER_SITE_SUBDIR= mm
|
MASTER_SITE_SUBDIR= mm
|
||||||
|
|
||||||
MAINTAINER= mm@FreeBSD.org
|
MAINTAINER= mm@FreeBSD.org
|
||||||
@ -48,12 +49,6 @@ MAKE_ARGS+= LIBEVENT=-levent
|
|||||||
BROKEN= does not build on FreeBSD 7.X
|
BROKEN= does not build on FreeBSD 7.X
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
post-extract:
|
|
||||||
@${CP} ${FILESDIR}/Makefile.all ${WRKSRC}/Makefile
|
|
||||||
@${CP} ${FILESDIR}/Makefile.relayctl ${WRKSRC}/relayctl/Makefile
|
|
||||||
@${CP} ${FILESDIR}/Makefile.relayd ${WRKSRC}/relayd/Makefile
|
|
||||||
@${CP} ${FILESDIR}/arc4random.c ${WRKSRC}/relayd
|
|
||||||
|
|
||||||
post-patch:
|
post-patch:
|
||||||
@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' \
|
@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' \
|
||||||
${WRKSRC}/relayd/relay.c \
|
${WRKSRC}/relayd/relay.c \
|
||||||
@ -64,5 +59,7 @@ post-patch:
|
|||||||
post-install:
|
post-install:
|
||||||
@${INSTALL_DATA} ${WRKSRC}/../etc/relayd.conf \
|
@${INSTALL_DATA} ${WRKSRC}/../etc/relayd.conf \
|
||||||
${PREFIX}/etc/relayd.conf.sample
|
${PREFIX}/etc/relayd.conf.sample
|
||||||
|
@${CP} -n ${PREFIX}/etc/relayd.conf.sample \
|
||||||
|
${PREFIX}/etc/relayd.conf
|
||||||
|
|
||||||
.include <bsd.port.post.mk>
|
.include <bsd.port.post.mk>
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
SHA256 (relayd-4.9.20110526.tar.bz2) = d9ce490b6bb2c82ed879b4e1c047977ffef49b530680c5816b05e1a04969411f
|
SHA256 (relayd-5.0.20110907.tar.bz2) = bba3aa1e427031f74fa617616532b6c607b273d11278a06fad9e37aecb43f220
|
||||||
SIZE (relayd-4.9.20110526.tar.bz2) = 85883
|
SIZE (relayd-5.0.20110907.tar.bz2) = 86032
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
|
|
||||||
SUBDIR= relayd relayctl
|
|
||||||
|
|
||||||
.include <bsd.subdir.mk>
|
|
@ -1,24 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
|
|
||||||
PROG= relayctl
|
|
||||||
|
|
||||||
.PATH: ${.CURDIR}/../../lib/libutil
|
|
||||||
SRCS= imsg-buffer.c \
|
|
||||||
imsg.c
|
|
||||||
|
|
||||||
.PATH: ${.CURDIR}/../relayd
|
|
||||||
SRCS+= log.c
|
|
||||||
|
|
||||||
.PATH: ${.CURDIR}
|
|
||||||
SRCS+= relayctl.c \
|
|
||||||
parser.c
|
|
||||||
|
|
||||||
MAN= relayctl.8
|
|
||||||
|
|
||||||
CFLAGS+= -D__dead=''
|
|
||||||
CFLAGS+= -I${.CURDIR} \
|
|
||||||
-I${.CURDIR}/../../lib/libutil \
|
|
||||||
-I${.CURDIR}/../relayd \
|
|
||||||
-I${PREFIX}/include
|
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
|
@ -1,44 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
|
|
||||||
PROG= relayd
|
|
||||||
|
|
||||||
MAN= relayd.8 \
|
|
||||||
relayd.conf.5
|
|
||||||
|
|
||||||
.PATH: ${.CURDIR}/../../lib/libutil
|
|
||||||
SRCS= imsg-buffer.c \
|
|
||||||
imsg.c
|
|
||||||
|
|
||||||
.PATH: ${.CURDIR}
|
|
||||||
SRCS+= parse.y \
|
|
||||||
log.c \
|
|
||||||
control.c \
|
|
||||||
ssl.c \
|
|
||||||
ssl_privsep.c \
|
|
||||||
relayd.c \
|
|
||||||
pfe.c \
|
|
||||||
pfe_filter.c \
|
|
||||||
hce.c \
|
|
||||||
relay.c \
|
|
||||||
relay_udp.c \
|
|
||||||
check_icmp.c \
|
|
||||||
check_tcp.c \
|
|
||||||
check_script.c \
|
|
||||||
name2id.c \
|
|
||||||
arc4random.c \
|
|
||||||
shuffle.c \
|
|
||||||
proc.c \
|
|
||||||
config.c
|
|
||||||
|
|
||||||
CFLAGS+= -DSHA1_DIGEST_LENGTH=SHA_DIGEST_LENGTH \
|
|
||||||
-DSHA1_DIGEST_STRING_LENGTH=SHA_DIGEST_LENGTH \
|
|
||||||
-DOPENSSL_NO_SHA -DOPENSSL_NO_MD5 \
|
|
||||||
-D__dead=''
|
|
||||||
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../../lib/libutil \
|
|
||||||
-I${PREFIX}/include
|
|
||||||
CLEANFILES+= y.tab.h
|
|
||||||
|
|
||||||
LDADD= -lmd -L${PREFIX}/lib ${LIBEVENT} -lssl -lcrypto
|
|
||||||
DPADD= ${LIBEVENT} ${LIBSSL} ${LIBCRYPTO}
|
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
|
@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 1999,2000,2004 Damien Miller <djm@mindrot.org>
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
* $FreeBSD: /tmp/pcvs/ports/net/relayd/files/Attic/arc4random.c,v 1.1 2010-05-28 11:59:49 mm Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/param.h>
|
|
||||||
|
|
||||||
#if __FreeBSD_version < 800041
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Calculate a uniformly distributed random number less than upper_bound
|
|
||||||
* avoiding "modulo bias".
|
|
||||||
*
|
|
||||||
* Uniformity is achieved by generating new random numbers until the one
|
|
||||||
* returned is outside the range [0, 2**32 % upper_bound). This
|
|
||||||
* guarantees the selected random number will be inside
|
|
||||||
* [2**32 % upper_bound, 2**32) which maps back to [0, upper_bound)
|
|
||||||
* after reduction modulo upper_bound.
|
|
||||||
*/
|
|
||||||
u_int32_t
|
|
||||||
arc4random_uniform(u_int32_t upper_bound)
|
|
||||||
{
|
|
||||||
u_int32_t r, min;
|
|
||||||
|
|
||||||
if (upper_bound < 2)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#if (ULONG_MAX > 0xffffffffUL)
|
|
||||||
min = 0x100000000UL % upper_bound;
|
|
||||||
#else
|
|
||||||
/* Calculate (2**32 % upper_bound) avoiding 64-bit math */
|
|
||||||
if (upper_bound > 0x80000000)
|
|
||||||
min = 1 + ~upper_bound; /* 2**32 - upper_bound */
|
|
||||||
else {
|
|
||||||
/* (2**32 - (x * 2)) % x == 2**32 % x when x <= 2**31 */
|
|
||||||
min = ((0xffffffff - (upper_bound * 2)) + 1) % upper_bound;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This could theoretically loop forever but each retry has
|
|
||||||
* p > 0.5 (worst case, usually far better) of selecting a
|
|
||||||
* number inside the range we need, so it should rarely need
|
|
||||||
* to re-roll.
|
|
||||||
*/
|
|
||||||
for (;;) {
|
|
||||||
r = arc4random();
|
|
||||||
if (r >= min)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return r % upper_bound;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __FreeBSD_version */
|
|
@ -1,20 +0,0 @@
|
|||||||
--- relayd/check_tcp.c.orig Sat Jun 4 08:59:06 2011
|
|
||||||
+++ relayd/check_tcp.c Sat Jun 4 09:07:17 2011
|
|
||||||
@@ -77,6 +77,8 @@
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ cte->s = s;
|
|
||||||
+
|
|
||||||
bzero(&lng, sizeof(lng));
|
|
||||||
if (setsockopt(s, SOL_SOCKET, SO_LINGER, &lng, sizeof(lng)) == -1)
|
|
||||||
goto bad;
|
|
||||||
@@ -100,7 +102,6 @@
|
|
||||||
|
|
||||||
cte->buf = NULL;
|
|
||||||
cte->host->up = HOST_UP;
|
|
||||||
- cte->s = s;
|
|
||||||
event_del(&cte->ev);
|
|
||||||
event_set(&cte->ev, s, EV_TIMEOUT|EV_WRITE, tcp_write, cte);
|
|
||||||
event_add(&cte->ev, &tv);
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
--- relayd/hce.c.orig Mon Jun 6 18:02:45 2011
|
|
||||||
+++ relayd/hce.c Mon Jun 6 18:09:07 2011
|
|
||||||
@@ -207,10 +207,27 @@
|
|
||||||
struct timeval tv_now, tv_dur;
|
|
||||||
u_long duration;
|
|
||||||
u_int logopt;
|
|
||||||
- struct host *h;
|
|
||||||
+ struct host *h, *hostupd;
|
|
||||||
int hostup;
|
|
||||||
const char *msg;
|
|
||||||
|
|
||||||
+ if ((hostupd = host_find(env, host->conf.id)) == NULL)
|
|
||||||
+ fatalx("hce_notify_done: desynchronized");
|
|
||||||
+
|
|
||||||
+ if ((table = table_find(env, host->conf.tableid)) == NULL)
|
|
||||||
+ fatalx("hce_notify_done: invalid table id");
|
|
||||||
+
|
|
||||||
+ if (hostupd->flags & F_DISABLE) {
|
|
||||||
+ if (env->sc_opts & RELAYD_OPT_LOGUPDATE) {
|
|
||||||
+ log_info("host %s, check %s%s (ignoring result, "
|
|
||||||
+ "host disabled)",
|
|
||||||
+ host->conf.name, table_check(table->conf.check),
|
|
||||||
+ (table->conf.flags & F_SSL) ? " use ssl" : "");
|
|
||||||
+ }
|
|
||||||
+ host->flags |= (F_CHECK_SENT|F_CHECK_DONE);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
hostup = host->up;
|
|
||||||
host->he = he;
|
|
||||||
|
|
||||||
@@ -250,9 +267,6 @@
|
|
||||||
duration = (tv_dur.tv_sec * 1000) + (tv_dur.tv_usec / 1000.0);
|
|
||||||
else
|
|
||||||
duration = 0;
|
|
||||||
-
|
|
||||||
- if ((table = table_find(env, host->conf.tableid)) == NULL)
|
|
||||||
- fatalx("hce_notify_done: invalid table id");
|
|
||||||
|
|
||||||
if (env->sc_opts & logopt) {
|
|
||||||
log_info("host %s, check %s%s (%lums), state %s -> %s, "
|
|
@ -1,24 +0,0 @@
|
|||||||
--- relayctl/parser.c.orig 2011-05-19 10:56:49.000000000 +0200
|
|
||||||
+++ relayctl/parser.c 2011-05-22 10:51:26.683383150 +0200
|
|
||||||
@@ -18,7 +18,11 @@
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/param.h>
|
|
||||||
+#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/queue.h>
|
|
||||||
|
|
||||||
@@ -87,7 +91,9 @@
|
|
||||||
{KEYWORD, "hosts", SHOW_HOSTS, NULL},
|
|
||||||
{KEYWORD, "redirects", SHOW_RDRS, NULL},
|
|
||||||
{KEYWORD, "relays", SHOW_RELAYS, NULL},
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
{KEYWORD, "routers", SHOW_ROUTERS, NULL},
|
|
||||||
+#endif
|
|
||||||
{KEYWORD, "sessions", SHOW_SESSIONS, NULL},
|
|
||||||
{ENDTOKEN, "", NONE, NULL}
|
|
||||||
};
|
|
@ -1,12 +0,0 @@
|
|||||||
--- relayctl/parser.h.orig 2011-05-22 10:56:33.769045780 +0200
|
|
||||||
+++ relayctl/parser.h 2011-05-22 10:56:46.122442873 +0200
|
|
||||||
@@ -23,7 +23,9 @@
|
|
||||||
SHOW_RDRS,
|
|
||||||
SHOW_RELAYS,
|
|
||||||
SHOW_SESSIONS,
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
SHOW_ROUTERS,
|
|
||||||
+#endif
|
|
||||||
RDR_DISABLE,
|
|
||||||
RDR_ENABLE,
|
|
||||||
TABLE_DISABLE,
|
|
@ -1,17 +0,0 @@
|
|||||||
--- relayctl/relayctl.8.orig 2011-05-19 10:56:49.000000000 +0200
|
|
||||||
+++ relayctl/relayctl.8 2011-05-22 10:43:42.420854658 +0200
|
|
||||||
@@ -78,13 +78,10 @@
|
|
||||||
Show detailed status of relays including the current and average
|
|
||||||
access statistics.
|
|
||||||
The statistics will be updated every minute.
|
|
||||||
-.It Cm show routers
|
|
||||||
-Show detailed status of routers including the configured network
|
|
||||||
-routes.
|
|
||||||
.It Cm show sessions
|
|
||||||
Dump the complete list of running relay sessions.
|
|
||||||
.It Cm show summary
|
|
||||||
-Display a list of all relays, redirections, routers, tables, and hosts.
|
|
||||||
+Display a list of all relays, redirections, tables, and hosts.
|
|
||||||
.It Cm table disable Op Ar name | id
|
|
||||||
Disable a table.
|
|
||||||
Consider all hosts disabled.
|
|
@ -1,83 +0,0 @@
|
|||||||
--- relayctl/relayctl.c.orig 2011-05-20 11:43:53.000000000 +0200
|
|
||||||
+++ relayctl/relayctl.c 2011-05-22 11:19:50.925707539 +0200
|
|
||||||
@@ -20,6 +20,9 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/param.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/queue.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
@@ -141,7 +144,9 @@
|
|
||||||
case SHOW_HOSTS:
|
|
||||||
case SHOW_RDRS:
|
|
||||||
case SHOW_RELAYS:
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case SHOW_ROUTERS:
|
|
||||||
+#endif
|
|
||||||
imsg_compose(ibuf, IMSG_CTL_SHOW_SUM, 0, 0, -1, NULL, 0);
|
|
||||||
printf("%-4s\t%-8s\t%-24s\t%-7s\tStatus\n",
|
|
||||||
"Id", "Type", "Name", "Avlblty");
|
|
||||||
@@ -222,7 +227,9 @@
|
|
||||||
case SHOW_HOSTS:
|
|
||||||
case SHOW_RDRS:
|
|
||||||
case SHOW_RELAYS:
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case SHOW_ROUTERS:
|
|
||||||
+#endif
|
|
||||||
done = show_summary_msg(&imsg, res->action);
|
|
||||||
break;
|
|
||||||
case SHOW_SESSIONS:
|
|
||||||
@@ -312,7 +319,11 @@
|
|
||||||
imn = monitor_lookup(imsg->hdr.type);
|
|
||||||
printf("%s: imsg type %u len %u peerid %u pid %d\n", imn->name,
|
|
||||||
imsg->hdr.type, imsg->hdr.len, imsg->hdr.peerid, imsg->hdr.pid);
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ printf("\ttimestamp: %lu, %s", (unsigned long)now, ctime(&now));
|
|
||||||
+#else
|
|
||||||
printf("\ttimestamp: %u, %s", now, ctime(&now));
|
|
||||||
+#endif
|
|
||||||
if (imn->type == -1)
|
|
||||||
done = 1;
|
|
||||||
if (imn->func != NULL)
|
|
||||||
@@ -328,8 +339,10 @@
|
|
||||||
struct table *table;
|
|
||||||
struct host *host;
|
|
||||||
struct relay *rlay;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct router *rt;
|
|
||||||
struct netroute *nr;
|
|
||||||
+#endif
|
|
||||||
struct ctl_stats stats[RELAY_MAXPROC];
|
|
||||||
char name[MAXHOSTNAMELEN];
|
|
||||||
|
|
||||||
@@ -394,6 +407,7 @@
|
|
||||||
bcopy(imsg->data, &stats, sizeof(stats));
|
|
||||||
print_statistics(stats);
|
|
||||||
break;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case IMSG_CTL_ROUTER:
|
|
||||||
if (!(type == SHOW_SUM || type == SHOW_ROUTERS))
|
|
||||||
break;
|
|
||||||
@@ -416,6 +430,7 @@
|
|
||||||
printf("\t%8s\troute: %s/%d\n",
|
|
||||||
"", name, nr->nr_conf.prefixlen);
|
|
||||||
break;
|
|
||||||
+#endif
|
|
||||||
case IMSG_CTL_END:
|
|
||||||
return (1);
|
|
||||||
default:
|
|
||||||
@@ -557,7 +572,11 @@
|
|
||||||
printf("\t%8s\ttotal: %llu sessions\n"
|
|
||||||
"\t%8s\tlast: %u/%us %u/h %u/d sessions\n"
|
|
||||||
"\t%8s\taverage: %u/%us %u/h %u/d sessions\n",
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ "", (long long unsigned)crs.cnt,
|
|
||||||
+#else
|
|
||||||
"", crs.cnt,
|
|
||||||
+#endif
|
|
||||||
"", crs.last, crs.interval,
|
|
||||||
crs.last_hour, crs.last_day,
|
|
||||||
"", crs.avg, crs.interval,
|
|
@ -1,10 +0,0 @@
|
|||||||
--- relayd.orig/carp.c 2011-05-22 01:06:39.463154237 +0200
|
|
||||||
+++ relayd/carp.c 2011-05-22 01:06:54.671017027 +0200
|
|
||||||
@@ -19,6 +19,7 @@
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
+#include <sys/queue.h>
|
|
||||||
|
|
||||||
#include <net/if.h>
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
--- relayd.orig/check_tcp.c 2011-05-22 01:06:39.463154237 +0200
|
|
||||||
+++ relayd/check_tcp.c 2011-05-22 01:06:54.673025092 +0200
|
|
||||||
@@ -31,7 +31,7 @@
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fnmatch.h>
|
|
||||||
-#include <sha1.h>
|
|
||||||
+#include <sha.h>
|
|
||||||
|
|
||||||
#include <openssl/ssl.h>
|
|
||||||
|
|
||||||
@@ -287,7 +287,11 @@
|
|
||||||
if (b == NULL)
|
|
||||||
fatal("out of memory");
|
|
||||||
*b = '\0';
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (fnmatch(cte->table->conf.exbuf, cte->buf->buf, 0) == 0) {
|
|
||||||
+#else
|
|
||||||
+ if (fnmatch(cte->table->conf.exbuf, (char *)cte->buf->buf, 0) == 0) {
|
|
||||||
+#endif
|
|
||||||
cte->host->he = HCE_SEND_EXPECT_OK;
|
|
||||||
cte->host->up = HOST_UP;
|
|
||||||
return (0);
|
|
||||||
@@ -320,7 +324,11 @@
|
|
||||||
fatal("out of memory");
|
|
||||||
*b = '\0';
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
head = cte->buf->buf;
|
|
||||||
+#else
|
|
||||||
+ head = (char *)cte->buf->buf;
|
|
||||||
+#endif
|
|
||||||
host = cte->host;
|
|
||||||
host->he = HCE_HTTP_CODE_ERROR;
|
|
||||||
|
|
||||||
@@ -372,7 +380,11 @@
|
|
||||||
fatal("out of memory");
|
|
||||||
*b = '\0';
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
head = cte->buf->buf;
|
|
||||||
+#else
|
|
||||||
+ head = (char *)cte->buf->buf;
|
|
||||||
+#endif
|
|
||||||
host = cte->host;
|
|
||||||
host->he = HCE_HTTP_DIGEST_ERROR;
|
|
||||||
|
|
||||||
@@ -384,7 +396,11 @@
|
|
||||||
}
|
|
||||||
head += strlen("\r\n\r\n");
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
digeststr(cte->table->conf.digest_type, head, strlen(head), digest);
|
|
||||||
+#else
|
|
||||||
+ digeststr(cte->table->conf.digest_type, (u_int8_t*)head, strlen(head), digest);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (strcmp(cte->table->conf.digest, digest)) {
|
|
||||||
log_warnx("%s: %s failed (wrong digest)",
|
|
@ -1,62 +0,0 @@
|
|||||||
--- relayd.orig/config.c 2011-05-22 01:06:39.463154237 +0200
|
|
||||||
+++ relayd/config.c 2011-05-22 01:18:41.041076104 +0200
|
|
||||||
@@ -118,6 +118,7 @@
|
|
||||||
RB_INIT(&env->sc_proto_default.request_tree);
|
|
||||||
RB_INIT(&env->sc_proto_default.response_tree);
|
|
||||||
}
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (what & CONFIG_RTS) {
|
|
||||||
if ((env->sc_rts =
|
|
||||||
calloc(1, sizeof(*env->sc_rts))) == NULL)
|
|
||||||
@@ -130,7 +131,7 @@
|
|
||||||
return (-1);
|
|
||||||
TAILQ_INIT(env->sc_routes);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+#endif
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -143,8 +144,10 @@
|
|
||||||
struct address *virt;
|
|
||||||
struct protocol *proto;
|
|
||||||
struct relay *rlay;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct netroute *nr;
|
|
||||||
struct router *rt;
|
|
||||||
+#endif
|
|
||||||
u_int what;
|
|
||||||
|
|
||||||
what = ps->ps_what[privsep_process] & reset;
|
|
||||||
@@ -181,6 +184,7 @@
|
|
||||||
}
|
|
||||||
env->sc_protocount = 0;
|
|
||||||
}
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (what & CONFIG_RTS && env->sc_rts != NULL) {
|
|
||||||
while ((rt = TAILQ_FIRST(env->sc_rts)) != NULL) {
|
|
||||||
TAILQ_REMOVE(env->sc_rts, rt, rt_entry);
|
|
||||||
@@ -203,6 +207,7 @@
|
|
||||||
}
|
|
||||||
env->sc_routecount = 0;
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
@@ -476,6 +481,7 @@
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int
|
|
||||||
config_setrt(struct relayd *env, struct router *rt)
|
|
||||||
{
|
|
||||||
@@ -570,6 +576,7 @@
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
config_setproto(struct relayd *env, struct protocol *proto)
|
|
@ -1,35 +0,0 @@
|
|||||||
--- relayd.orig/hce.c 2011-05-22 01:06:39.461146172 +0200
|
|
||||||
+++ relayd/hce.c 2011-05-22 01:08:01.230992828 +0200
|
|
||||||
@@ -80,7 +80,9 @@
|
|
||||||
/* Allow maximum available sockets for TCP checks */
|
|
||||||
socket_rlimit(-1);
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
snmp_init(env, PROC_PARENT);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -263,8 +265,10 @@
|
|
||||||
print_availability(host->check_cnt, host->up_cnt));
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (host->last_up != host->up)
|
|
||||||
snmp_hosttrap(env, table, host);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
host->last_up = host->up;
|
|
||||||
|
|
||||||
@@ -350,9 +354,11 @@
|
|
||||||
case IMSG_CFG_HOST:
|
|
||||||
config_gethost(env, imsg);
|
|
||||||
break;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case IMSG_SNMPSOCK:
|
|
||||||
snmp_getsock(env, imsg);
|
|
||||||
break;
|
|
||||||
+#endif
|
|
||||||
case IMSG_CFG_DONE:
|
|
||||||
config_getcfg(env, imsg);
|
|
||||||
hce_setup_events();
|
|
@ -1,14 +0,0 @@
|
|||||||
--- relayd.orig/log.c 2011-05-22 01:06:39.461146172 +0200
|
|
||||||
+++ relayd/log.c 2011-05-22 01:06:54.680052759 +0200
|
|
||||||
@@ -16,7 +16,11 @@
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/param.h>
|
|
||||||
+#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/queue.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/tree.h>
|
|
@ -1,249 +0,0 @@
|
|||||||
--- relayd.orig/parse.y 2011-05-22 01:06:39.462150204 +0200
|
|
||||||
+++ relayd/parse.y 2011-05-22 01:06:54.687080706 +0200
|
|
||||||
@@ -35,7 +35,7 @@
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
-#include <net/route.h>
|
|
||||||
+// FreeBSD #include <net/route.h>
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
@@ -93,8 +93,10 @@
|
|
||||||
objid_t last_host_id = 0;
|
|
||||||
objid_t last_relay_id = 0;
|
|
||||||
objid_t last_proto_id = 0;
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
objid_t last_rt_id = 0;
|
|
||||||
objid_t last_nr_id = 0;
|
|
||||||
+*/
|
|
||||||
|
|
||||||
static struct rdr *rdr = NULL;
|
|
||||||
static struct table *table = NULL;
|
|
||||||
@@ -103,7 +105,9 @@
|
|
||||||
struct relaylist relays;
|
|
||||||
static struct protocol *proto = NULL;
|
|
||||||
static struct protonode node;
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
static struct router *router = NULL;
|
|
||||||
+*/
|
|
||||||
static u_int16_t label = 0;
|
|
||||||
static in_port_t tableport = 0;
|
|
||||||
static int nodedirection;
|
|
||||||
@@ -148,12 +152,20 @@
|
|
||||||
%token CIPHERS CODE COOKIE DEMOTE DIGEST DISABLE ERROR EXPECT
|
|
||||||
%token EXTERNAL FILENAME FILTER FORWARD FROM HASH HEADER HOST ICMP
|
|
||||||
%token INCLUDE INET INET6 INTERFACE INTERVAL IP LABEL LISTEN
|
|
||||||
-%token LOADBALANCE LOG LOOKUP MARK MARKED MODE NAT NO DESTINATION
|
|
||||||
-%token NODELAY NOTHING ON PARENT PATH PORT PREFORK PRIORITY PROTO
|
|
||||||
+// FreeBSD exclude %token LOADBALANCE LOG LOOKUP MARK MARKED MODE NAT NO DESTINATION
|
|
||||||
+%token LOADBALANCE LOG LOOKUP MARK MARKED MODE NAT NO
|
|
||||||
+// FreeBSD exclude %token NODELAY NOTHING ON PARENT PATH PORT PREFORK PRIORITY PROTO
|
|
||||||
+%token NODELAY NOTHING ON PARENT PATH PORT PREFORK PROTO
|
|
||||||
%token QUERYSTR REAL REDIRECT RELAY REMOVE REQUEST RESPONSE RETRY
|
|
||||||
%token RETURN ROUNDROBIN ROUTE SACK SCRIPT SEND SESSION SOCKET SPLICE
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
%token SSL STICKYADDR STYLE TABLE TAG TCP TIMEOUT TO ROUTER RTLABEL
|
|
||||||
%token TRANSPARENT TRAP UPDATES URL VIRTUAL WITH TTL RTABLE MATCH
|
|
||||||
+*/
|
|
||||||
+// Start FreeBSD include
|
|
||||||
+%token SSL STICKYADDR STYLE TABLE TAG TCP TIMEOUT TO
|
|
||||||
+%token TRANSPARENT TRAP UPDATES URL VIRTUAL WITH TTL
|
|
||||||
+// End FreeBSD include
|
|
||||||
%token <v.string> STRING
|
|
||||||
%token <v.number> NUMBER
|
|
||||||
%type <v.string> hostname interface table
|
|
||||||
@@ -179,7 +191,7 @@
|
|
||||||
| grammar tabledef '\n'
|
|
||||||
| grammar relay '\n'
|
|
||||||
| grammar proto '\n'
|
|
||||||
- | grammar router '\n'
|
|
||||||
+// FreeBSD | grammar router '\n'
|
|
||||||
| grammar error '\n' { file->errors++; }
|
|
||||||
;
|
|
||||||
|
|
||||||
@@ -363,6 +375,7 @@
|
|
||||||
}
|
|
||||||
conf->sc_prefork_relay = $2;
|
|
||||||
}
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
| DEMOTE STRING {
|
|
||||||
if (loadcfg)
|
|
||||||
break;
|
|
||||||
@@ -386,6 +399,7 @@
|
|
||||||
break;
|
|
||||||
conf->sc_flags |= F_TRAP;
|
|
||||||
}
|
|
||||||
+*/
|
|
||||||
;
|
|
||||||
|
|
||||||
loglevel : UPDATES { $$ = RELAYD_OPT_LOGUPDATE; }
|
|
||||||
@@ -658,6 +672,7 @@
|
|
||||||
bcopy(&$2, &table->conf.timeout,
|
|
||||||
sizeof(struct timeval));
|
|
||||||
}
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
| DEMOTE STRING {
|
|
||||||
table->conf.flags |= F_DEMOTE;
|
|
||||||
if (strlcpy(table->conf.demote_group, $2,
|
|
||||||
@@ -675,6 +690,7 @@
|
|
||||||
YYERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+*/
|
|
||||||
| INTERVAL NUMBER {
|
|
||||||
if ($2 < conf->sc_interval.tv_sec ||
|
|
||||||
$2 % conf->sc_interval.tv_sec) {
|
|
||||||
@@ -1261,6 +1277,8 @@
|
|
||||||
rlay->rl_conf.name);
|
|
||||||
YYERROR;
|
|
||||||
}
|
|
||||||
+ if ((rlay->rl_conf.flags & F_NATLOOK) == 0 &&
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
if ((rlay->rl_conf.flags & (F_NATLOOK|F_DIVERT)) ==
|
|
||||||
(F_NATLOOK|F_DIVERT)) {
|
|
||||||
yyerror("relay %s with conflicting nat lookup "
|
|
||||||
@@ -1268,6 +1286,7 @@
|
|
||||||
YYERROR;
|
|
||||||
}
|
|
||||||
if ((rlay->rl_conf.flags & (F_NATLOOK|F_DIVERT)) == 0 &&
|
|
||||||
+*/
|
|
||||||
rlay->rl_conf.dstss.ss_family == AF_UNSPEC &&
|
|
||||||
rlay->rl_conf.dsttable == EMPTY_ID) {
|
|
||||||
yyerror("relay %s has no target, rdr, "
|
|
||||||
@@ -1430,11 +1449,13 @@
|
|
||||||
rlay->rl_conf.flags |= F_NATLOOK;
|
|
||||||
rlay->rl_conf.dstretry = $3;
|
|
||||||
}
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
| DESTINATION retry {
|
|
||||||
conf->sc_flags |= F_NEEDPF;
|
|
||||||
rlay->rl_conf.flags |= F_DIVERT;
|
|
||||||
rlay->rl_conf.dstretry = $2;
|
|
||||||
}
|
|
||||||
+*/
|
|
||||||
| tablespec {
|
|
||||||
if (rlay->rl_backuptable) {
|
|
||||||
yyerror("only one backup table is allowed");
|
|
||||||
@@ -1459,6 +1480,7 @@
|
|
||||||
| HASH { $$ = RELAY_DSTMODE_HASH; }
|
|
||||||
;
|
|
||||||
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
router : ROUTER STRING {
|
|
||||||
struct router *rt = NULL;
|
|
||||||
|
|
||||||
@@ -1594,7 +1616,7 @@
|
|
||||||
| DISABLE { rlay->rl_conf.flags |= F_DISABLE; }
|
|
||||||
| include
|
|
||||||
;
|
|
||||||
-
|
|
||||||
+*/
|
|
||||||
dstaf : /* empty */ {
|
|
||||||
rlay->rl_conf.dstaf.ss_family = AF_UNSPEC;
|
|
||||||
}
|
|
||||||
@@ -1670,6 +1692,7 @@
|
|
||||||
}
|
|
||||||
hst->conf.parentid = $2;
|
|
||||||
}
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
| PRIORITY NUMBER {
|
|
||||||
if (hst->conf.priority) {
|
|
||||||
yyerror("priority already set");
|
|
||||||
@@ -1681,6 +1704,7 @@
|
|
||||||
}
|
|
||||||
hst->conf.priority = $2;
|
|
||||||
}
|
|
||||||
+*/
|
|
||||||
| IP TTL NUMBER {
|
|
||||||
if (hst->conf.ttl) {
|
|
||||||
yyerror("ttl value already set");
|
|
||||||
@@ -1794,8 +1818,10 @@
|
|
||||||
{ "ciphers", CIPHERS },
|
|
||||||
{ "code", CODE },
|
|
||||||
{ "cookie", COOKIE },
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
{ "demote", DEMOTE },
|
|
||||||
{ "destination", DESTINATION },
|
|
||||||
+*/
|
|
||||||
{ "digest", DIGEST },
|
|
||||||
{ "disable", DISABLE },
|
|
||||||
{ "error", ERROR },
|
|
||||||
@@ -1833,7 +1859,7 @@
|
|
||||||
{ "path", PATH },
|
|
||||||
{ "port", PORT },
|
|
||||||
{ "prefork", PREFORK },
|
|
||||||
- { "priority", PRIORITY },
|
|
||||||
+// FreeBSD { "priority", PRIORITY },
|
|
||||||
{ "protocol", PROTO },
|
|
||||||
{ "query", QUERYSTR },
|
|
||||||
{ "real", REAL },
|
|
||||||
@@ -1846,9 +1872,11 @@
|
|
||||||
{ "return", RETURN },
|
|
||||||
{ "roundrobin", ROUNDROBIN },
|
|
||||||
{ "route", ROUTE },
|
|
||||||
+/* FreeBSD exclude
|
|
||||||
{ "router", ROUTER },
|
|
||||||
{ "rtable", RTABLE },
|
|
||||||
{ "rtlabel", RTLABEL },
|
|
||||||
+*/
|
|
||||||
{ "sack", SACK },
|
|
||||||
{ "script", SCRIPT },
|
|
||||||
{ "send", SEND },
|
|
||||||
@@ -1864,7 +1892,7 @@
|
|
||||||
{ "timeout", TIMEOUT },
|
|
||||||
{ "to", TO },
|
|
||||||
{ "transparent", TRANSPARENT },
|
|
||||||
- { "trap", TRAP },
|
|
||||||
+// FreeBSD { "trap", TRAP },
|
|
||||||
{ "ttl", TTL },
|
|
||||||
{ "updates", UPDATES },
|
|
||||||
{ "url", URL },
|
|
||||||
@@ -2096,7 +2124,8 @@
|
|
||||||
(isalnum(x) || (ispunct(x) && x != '(' && x != ')' && \
|
|
||||||
x != '{' && x != '}' && x != '<' && x != '>' && \
|
|
||||||
x != '!' && x != '=' && x != '#' && \
|
|
||||||
- x != ',' && x != '/'))
|
|
||||||
+ x != ','))
|
|
||||||
+// FreeBSD exclude x != ',' && x != '/'))
|
|
||||||
|
|
||||||
if (isalnum(c) || c == ':' || c == '_') {
|
|
||||||
do {
|
|
||||||
@@ -2240,13 +2269,14 @@
|
|
||||||
loadcfg = 1;
|
|
||||||
errors = 0;
|
|
||||||
last_host_id = last_table_id = last_rdr_id = last_proto_id =
|
|
||||||
- last_relay_id = last_rt_id = last_nr_id = 0;
|
|
||||||
+// FreeBSD last_relay_id = last_rt_id = last_nr_id = 0;
|
|
||||||
+ last_relay_id = 0;
|
|
||||||
|
|
||||||
rdr = NULL;
|
|
||||||
table = NULL;
|
|
||||||
rlay = NULL;
|
|
||||||
proto = NULL;
|
|
||||||
- router = NULL;
|
|
||||||
+// FreeBSD router = NULL;
|
|
||||||
|
|
||||||
if ((file = pushfile(filename, 0)) == NULL)
|
|
||||||
return (-1);
|
|
||||||
@@ -2276,8 +2306,8 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TAILQ_EMPTY(conf->sc_rdrs) &&
|
|
||||||
- TAILQ_EMPTY(conf->sc_relays) &&
|
|
||||||
- TAILQ_EMPTY(conf->sc_rts)) {
|
|
||||||
+ TAILQ_EMPTY(conf->sc_relays) /* FreeBSD exclude &&
|
|
||||||
+ TAILQ_EMPTY(conf->sc_rts) */ ) {
|
|
||||||
log_warnx("no actions, nothing to do");
|
|
||||||
errors++;
|
|
||||||
}
|
|
||||||
@@ -2493,7 +2523,8 @@
|
|
||||||
hints.ai_family = PF_UNSPEC;
|
|
||||||
hints.ai_socktype = SOCK_DGRAM; /* DUMMY */
|
|
||||||
error = getaddrinfo(s, NULL, &hints, &res0);
|
|
||||||
- if (error == EAI_AGAIN || error == EAI_NODATA || error == EAI_NONAME)
|
|
||||||
+// if (error == EAI_AGAIN || error == EAI_NODATA || error == EAI_NONAME)
|
|
||||||
+ if (error == EAI_AGAIN || error == EAI_NONAME)
|
|
||||||
return (0);
|
|
||||||
if (error) {
|
|
||||||
log_warnx("%s: could not parse \"%s\": %s", __func__, s,
|
|
@ -1,109 +0,0 @@
|
|||||||
--- relayd.orig/pfe.c 2011-05-22 01:06:39.464157989 +0200
|
|
||||||
+++ relayd/pfe.c 2011-05-22 01:09:30.589288807 +0200
|
|
||||||
@@ -17,6 +17,9 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/param.h>
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/queue.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
@@ -185,12 +188,14 @@
|
|
||||||
case IMSG_CFG_VIRT:
|
|
||||||
config_getvirt(env, imsg);
|
|
||||||
break;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case IMSG_CFG_ROUTER:
|
|
||||||
config_getrt(env, imsg);
|
|
||||||
break;
|
|
||||||
case IMSG_CFG_ROUTE:
|
|
||||||
config_getroute(env, imsg);
|
|
||||||
break;
|
|
||||||
+#endif
|
|
||||||
case IMSG_CFG_PROTO:
|
|
||||||
config_getproto(env, imsg);
|
|
||||||
break;
|
|
||||||
@@ -292,8 +297,10 @@
|
|
||||||
struct rdr *rdr;
|
|
||||||
struct host *host;
|
|
||||||
struct relay *rlay;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct router *rt;
|
|
||||||
struct netroute *nr;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (env->sc_rdrs == NULL)
|
|
||||||
goto relays;
|
|
||||||
@@ -324,7 +331,11 @@
|
|
||||||
}
|
|
||||||
relays:
|
|
||||||
if (env->sc_relays == NULL)
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
goto routers;
|
|
||||||
+#else
|
|
||||||
+ goto end;
|
|
||||||
+#endif
|
|
||||||
TAILQ_FOREACH(rlay, env->sc_relays, rl_entry) {
|
|
||||||
rlay->rl_stats[env->sc_prefork_relay].id = EMPTY_ID;
|
|
||||||
imsg_compose_event(&c->iev, IMSG_CTL_RELAY, 0, 0, -1,
|
|
||||||
@@ -351,6 +362,7 @@
|
|
||||||
0, 0, -1, host, sizeof(*host));
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
routers:
|
|
||||||
if (env->sc_rts == NULL)
|
|
||||||
goto end;
|
|
||||||
@@ -370,6 +382,7 @@
|
|
||||||
imsg_compose_event(&c->iev, IMSG_CTL_HOST,
|
|
||||||
0, 0, -1, host, sizeof(*host));
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
end:
|
|
||||||
imsg_compose_event(&c->iev, IMSG_CTL_END, 0, 0, -1, NULL, 0);
|
|
||||||
@@ -622,8 +635,10 @@
|
|
||||||
struct table *table;
|
|
||||||
struct ctl_id id;
|
|
||||||
struct imsg imsg;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct ctl_demote demote;
|
|
||||||
struct router *rt;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
bzero(&id, sizeof(id));
|
|
||||||
bzero(&imsg, sizeof(imsg));
|
|
||||||
@@ -678,6 +693,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
TAILQ_FOREACH(rt, env->sc_rts, rt_entry) {
|
|
||||||
rt->rt_conf.flags &= ~(F_BACKUP);
|
|
||||||
rt->rt_conf.flags &= ~(F_DOWN);
|
|
||||||
@@ -685,6 +701,7 @@
|
|
||||||
if ((rt->rt_gwtable->conf.flags & F_CHANGED))
|
|
||||||
sync_routes(env, rt);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TAILQ_FOREACH(table, env->sc_tables, entry) {
|
|
||||||
if (table->conf.check == CHECK_NOCHECK)
|
|
||||||
@@ -695,6 +712,7 @@
|
|
||||||
*/
|
|
||||||
table->conf.flags &= ~(F_CHANGED);
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
/*
|
|
||||||
* handle demotion.
|
|
||||||
*/
|
|
||||||
@@ -717,6 +735,7 @@
|
|
||||||
sizeof(demote.group));
|
|
||||||
proc_compose_imsg(env->sc_ps, PROC_PARENT, -1, IMSG_DEMOTE, -1,
|
|
||||||
&demote, sizeof(demote));
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,284 +0,0 @@
|
|||||||
--- relayd/pfe_filter.c.orig 2011-05-19 10:56:49.000000000 +0200
|
|
||||||
+++ relayd/pfe_filter.c 2011-05-22 10:32:36.639918375 +0200
|
|
||||||
@@ -24,7 +24,10 @@
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/pfvar.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
+/* New pf */
|
|
||||||
#include <netinet/tcp.h>
|
|
||||||
+#endif
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
@@ -43,8 +46,14 @@
|
|
||||||
struct pfdata {
|
|
||||||
int dev;
|
|
||||||
struct pf_anchor *anchor;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct pfioc_trans pft;
|
|
||||||
struct pfioc_trans_e pfte;
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ struct pfioc_trans pft[PF_RULESET_MAX];
|
|
||||||
+ struct pfioc_trans_e pfte[PF_RULESET_MAX];
|
|
||||||
+#endif
|
|
||||||
u_int8_t pfused;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -103,6 +112,10 @@
|
|
||||||
sizeof(tables[i].pfrt_name))
|
|
||||||
goto toolong;
|
|
||||||
tables[i].pfrt_flags |= PFR_TFLAG_PERSIST;
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ log_debug("init_tables: prepare anchor \"%s\" and table \"%s\"",
|
|
||||||
+ tables[i].pfrt_anchor, tables[i].pfrt_name);
|
|
||||||
+#endif
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (i != env->sc_rdrcount)
|
|
||||||
@@ -286,12 +299,18 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
psnk.psnk_af = host->conf.ss.ss_family;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
psnk.psnk_killed = 0;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (ioctl(env->sc_pf->dev,
|
|
||||||
DIOCKILLSRCNODES, &psnk) == -1)
|
|
||||||
fatal("kill_srcnodes: cannot kill src nodes");
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
cnt += psnk.psnk_killed;
|
|
||||||
+#else
|
|
||||||
+ cnt += psnk.psnk_af;
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
return (cnt);
|
|
||||||
@@ -335,6 +354,7 @@
|
|
||||||
int
|
|
||||||
transaction_init(struct relayd *env, const char *anchor)
|
|
||||||
{
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
env->sc_pf->pft.size = 1;
|
|
||||||
env->sc_pf->pft.esize = sizeof(env->sc_pf->pfte);
|
|
||||||
env->sc_pf->pft.array = &env->sc_pf->pfte;
|
|
||||||
@@ -347,17 +367,45 @@
|
|
||||||
if (ioctl(env->sc_pf->dev, DIOCXBEGIN,
|
|
||||||
&env->sc_pf->pft) == -1)
|
|
||||||
return (-1);
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < PF_RULESET_MAX; i++) {
|
|
||||||
+ env->sc_pf->pft[i].size = 1;
|
|
||||||
+ env->sc_pf->pft[i].esize = sizeof(env->sc_pf->pfte[i]);
|
|
||||||
+ env->sc_pf->pft[i].array = &env->sc_pf->pfte[i];
|
|
||||||
+
|
|
||||||
+ bzero(&env->sc_pf->pfte[i], sizeof(env->sc_pf->pfte[i]));
|
|
||||||
+ (void)strlcpy(env->sc_pf->pfte[i].anchor,
|
|
||||||
+ anchor, PF_ANCHOR_NAME_SIZE);
|
|
||||||
+ env->sc_pf->pfte[i].rs_num = i;
|
|
||||||
|
|
||||||
+ if (ioctl(env->sc_pf->dev, DIOCXBEGIN,
|
|
||||||
+ &env->sc_pf->pft[i]) == -1)
|
|
||||||
+ return (-1);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
transaction_commit(struct relayd *env)
|
|
||||||
{
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (ioctl(env->sc_pf->dev, DIOCXCOMMIT,
|
|
||||||
&env->sc_pf->pft) == -1)
|
|
||||||
return (-1);
|
|
||||||
-
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < PF_RULESET_MAX; i++) {
|
|
||||||
+ if (ioctl(env->sc_pf->dev, DIOCXCOMMIT,
|
|
||||||
+ &env->sc_pf->pft[i]) == -1)
|
|
||||||
+ return (-1);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -365,10 +413,18 @@
|
|
||||||
sync_ruleset(struct relayd *env, struct rdr *rdr, int enable)
|
|
||||||
{
|
|
||||||
struct pfioc_rule rio;
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ /* Old pf */
|
|
||||||
+ struct pfioc_pooladdr pio;
|
|
||||||
+#endif
|
|
||||||
struct sockaddr_in *sain;
|
|
||||||
struct sockaddr_in6 *sain6;
|
|
||||||
struct address *address;
|
|
||||||
char anchor[PF_ANCHOR_NAME_SIZE];
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ /* Old pf */
|
|
||||||
+ int rs = 0;
|
|
||||||
+#endif
|
|
||||||
struct table *t = rdr->table;
|
|
||||||
|
|
||||||
if ((env->sc_flags & F_NEEDPF) == 0)
|
|
||||||
@@ -397,8 +453,14 @@
|
|
||||||
|
|
||||||
TAILQ_FOREACH(address, &rdr->virts, entry) {
|
|
||||||
memset(&rio, 0, sizeof(rio));
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ /* Old pf */
|
|
||||||
+ memset(&pio, 0, sizeof(pio));
|
|
||||||
+#endif
|
|
||||||
(void)strlcpy(rio.anchor, anchor, sizeof(rio.anchor));
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
+ /* New pf */
|
|
||||||
if (rdr->conf.flags & F_MATCH) {
|
|
||||||
rio.rule.action = PF_MATCH;
|
|
||||||
rio.rule.quick = 0;
|
|
||||||
@@ -409,28 +471,61 @@
|
|
||||||
rio.rule.direction = PF_IN;
|
|
||||||
rio.rule.keep_state = PF_STATE_NORMAL;
|
|
||||||
|
|
||||||
+#endif
|
|
||||||
switch (t->conf.fwdmode) {
|
|
||||||
case FWD_NORMAL:
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
/* traditional redirection */
|
|
||||||
if (address->ipproto == IPPROTO_TCP) {
|
|
||||||
rio.rule.flags = TH_SYN;
|
|
||||||
rio.rule.flagset = (TH_SYN|TH_ACK);
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ /* traditional redirection in the rdr-anchor */
|
|
||||||
+ rs = PF_RULESET_RDR;
|
|
||||||
+ rio.rule.action = PF_RDR;
|
|
||||||
+#endif
|
|
||||||
break;
|
|
||||||
case FWD_ROUTE:
|
|
||||||
/* re-route with pf for DSR (direct server return) */
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ /* Old pf */
|
|
||||||
+ rs = PF_RULESET_FILTER;
|
|
||||||
+ rio.rule.action = PF_PASS;
|
|
||||||
+#endif
|
|
||||||
rio.rule.rt = PF_ROUTETO;
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ /* Old pf */
|
|
||||||
+ rio.rule.direction = PF_IN;
|
|
||||||
+ rio.rule.quick = 1; /* force first match */
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* Use sloppy state handling for half connections */
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ /* Old pf */
|
|
||||||
+ rio.rule.keep_state = PF_STATE_NORMAL;
|
|
||||||
+#endif
|
|
||||||
+#ifdef PFRULE_STATESLOPPY
|
|
||||||
rio.rule.rule_flag = PFRULE_STATESLOPPY;
|
|
||||||
+#endif
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fatalx("sync_ruleset: invalid forward mode");
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
rio.ticket = env->sc_pf->pfte.ticket;
|
|
||||||
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ rio.ticket = env->sc_pf->pfte[rs].ticket;
|
|
||||||
+ if (ioctl(env->sc_pf->dev, DIOCBEGINADDRS, &pio) == -1)
|
|
||||||
+ fatal("sync_ruleset: cannot initialise address pool");
|
|
||||||
+
|
|
||||||
+ rio.pool_ticket = pio.ticket;
|
|
||||||
+#endif
|
|
||||||
rio.rule.af = address->ss.ss_family;
|
|
||||||
rio.rule.proto = address->ipproto;
|
|
||||||
rio.rule.src.addr.type = PF_ADDR_ADDRMASK;
|
|
||||||
@@ -438,7 +533,9 @@
|
|
||||||
rio.rule.dst.port_op = address->port.op;
|
|
||||||
rio.rule.dst.port[0] = address->port.val[0];
|
|
||||||
rio.rule.dst.port[1] = address->port.val[1];
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
rio.rule.rtableid = -1; /* stay in the main routing table */
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (rio.rule.proto == IPPROTO_TCP)
|
|
||||||
rio.rule.timeout[PFTM_TCP_ESTABLISHED] =
|
|
||||||
@@ -466,18 +563,36 @@
|
|
||||||
memset(&rio.rule.dst.addr.v.a.mask.addr8, 0xff, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
rio.rule.nat.addr.type = PF_ADDR_NONE;
|
|
||||||
rio.rule.rdr.addr.type = PF_ADDR_TABLE;
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ pio.addr.addr.type = PF_ADDR_TABLE;
|
|
||||||
+#endif
|
|
||||||
if (strlen(t->conf.ifname))
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
(void)strlcpy(rio.rule.rdr.ifname, t->conf.ifname,
|
|
||||||
sizeof(rio.rule.rdr.ifname));
|
|
||||||
if (strlcpy(rio.rule.rdr.addr.v.tblname, rdr->conf.name,
|
|
||||||
sizeof(rio.rule.rdr.addr.v.tblname)) >=
|
|
||||||
sizeof(rio.rule.rdr.addr.v.tblname))
|
|
||||||
fatal("sync_ruleset: table name too long");
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ (void)strlcpy(pio.addr.ifname, t->conf.ifname,
|
|
||||||
+ sizeof(pio.addr.ifname));
|
|
||||||
+ if (strlcpy(pio.addr.addr.v.tblname, rdr->conf.name,
|
|
||||||
+ sizeof(pio.addr.addr.v.tblname)) >=
|
|
||||||
+ sizeof(pio.addr.addr.v.tblname))
|
|
||||||
+ fatal("sync_ruleset: table name too long");
|
|
||||||
+ if (ioctl(env->sc_pf->dev, DIOCADDADDR, &pio) == -1)
|
|
||||||
+ fatal("sync_ruleset: cannot add address to pool");
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (address->port.op == PF_OP_EQ ||
|
|
||||||
rdr->table->conf.flags & F_PORT) {
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
rio.rule.rdr.proxy_port[0] =
|
|
||||||
ntohs(rdr->table->conf.port);
|
|
||||||
rio.rule.rdr.port_op = PF_OP_EQ;
|
|
||||||
@@ -491,10 +606,27 @@
|
|
||||||
sizeof(rio.rule.route));
|
|
||||||
rio.rule.rdr.addr.type = PF_ADDR_NONE;
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ rio.rule.rpool.proxy_port[0] =
|
|
||||||
+ ntohs(rdr->table->conf.port);
|
|
||||||
+ rio.rule.rpool.port_op = PF_OP_EQ;
|
|
||||||
+ }
|
|
||||||
+ rio.rule.rpool.opts = PF_POOL_ROUNDROBIN;
|
|
||||||
+ if (rdr->conf.flags & F_STICKY)
|
|
||||||
+ rio.rule.rpool.opts |= PF_POOL_STICKYADDR;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (ioctl(env->sc_pf->dev, DIOCADDRULE, &rio) == -1)
|
|
||||||
fatal("cannot add rule");
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
log_debug("%s: rule added to anchor \"%s\"", __func__, anchor);
|
|
||||||
+#else
|
|
||||||
+ /* Old pf */
|
|
||||||
+ log_debug("%s: rule added to %sanchor \"%s\"", __func__,
|
|
||||||
+ rdr->table->conf.fwdmode == FWD_ROUTE ?
|
|
||||||
+ "" : "rdr-", anchor);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
if (transaction_commit(env) == -1)
|
|
||||||
log_warn("%s: add rules transaction failed", __func__);
|
|
@ -1,249 +0,0 @@
|
|||||||
--- relayd/relay.c.orig 2011-05-20 11:43:53.000000000 +0200
|
|
||||||
+++ relayd/relay.c 2011-05-22 10:41:40.085208004 +0200
|
|
||||||
@@ -16,7 +16,11 @@
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/param.h>
|
|
||||||
+#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/queue.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
@@ -77,7 +81,9 @@
|
|
||||||
|
|
||||||
void relay_write(struct bufferevent *, void *);
|
|
||||||
void relay_read(struct bufferevent *, void *);
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int relay_splicelen(struct ctl_relay_event *);
|
|
||||||
+#endif
|
|
||||||
void relay_error(struct bufferevent *, short, void *);
|
|
||||||
void relay_dump(struct ctl_relay_event *, const void *, size_t);
|
|
||||||
|
|
||||||
@@ -494,6 +500,7 @@
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
in_port_t
|
|
||||||
relay_socket_getport(struct sockaddr_storage *ss)
|
|
||||||
{
|
|
||||||
@@ -509,6 +516,7 @@
|
|
||||||
/* NOTREACHED */
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
relay_socket(struct sockaddr_storage *ss, in_port_t port,
|
|
||||||
@@ -577,6 +585,7 @@
|
|
||||||
&val, sizeof(val)) == -1)
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (proto->tcpflags & (TCPFLAG_SACK|TCPFLAG_NSACK)) {
|
|
||||||
if (proto->tcpflags & TCPFLAG_NSACK)
|
|
||||||
val = 0;
|
|
||||||
@@ -586,6 +595,7 @@
|
|
||||||
&val, sizeof(val)) == -1)
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
return (s);
|
|
||||||
|
|
||||||
@@ -675,6 +685,7 @@
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RELAY_PROTO_TCP:
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if ((proto->tcpflags & TCPFLAG_NSPLICE) ||
|
|
||||||
(rlay->rl_conf.flags & (F_SSL|F_SSLCLIENT)))
|
|
||||||
break;
|
|
||||||
@@ -692,6 +703,7 @@
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
con->se_out.splicelen = 0;
|
|
||||||
+#endif
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fatalx("relay_input: unknown protocol");
|
|
||||||
@@ -935,12 +947,20 @@
|
|
||||||
}
|
|
||||||
if (strstr(val, "$TIMEOUT") != NULL) {
|
|
||||||
snprintf(ibuf, sizeof(ibuf), "%lu",
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ (unsigned long)rlay->rl_conf.timeout.tv_sec);
|
|
||||||
+#else
|
|
||||||
rlay->rl_conf.timeout.tv_sec);
|
|
||||||
+#endif
|
|
||||||
if (expand_string(buf, len, "$TIMEOUT", ibuf) != 0)
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
return (buf);
|
|
||||||
+#else
|
|
||||||
+ return (char *)(buf);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
@@ -1552,7 +1572,11 @@
|
|
||||||
switch (type) {
|
|
||||||
case DIGEST_SHA1:
|
|
||||||
case DIGEST_MD5:
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ if ((md = digeststr(type, (u_int8_t*)val, strlen(val), NULL)) == NULL) {
|
|
||||||
+#else
|
|
||||||
if ((md = digeststr(type, val, strlen(val), NULL)) == NULL) {
|
|
||||||
+#endif
|
|
||||||
relay_close_http(con, 500,
|
|
||||||
"failed to allocate digest", 0);
|
|
||||||
goto fail;
|
|
||||||
@@ -1841,6 +1865,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int
|
|
||||||
relay_splicelen(struct ctl_relay_event *cre)
|
|
||||||
{
|
|
||||||
@@ -1859,6 +1884,7 @@
|
|
||||||
}
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
void
|
|
||||||
relay_error(struct bufferevent *bev, short error, void *arg)
|
|
||||||
@@ -1866,9 +1892,12 @@
|
|
||||||
struct ctl_relay_event *cre = (struct ctl_relay_event *)arg;
|
|
||||||
struct rsession *con = cre->con;
|
|
||||||
struct evbuffer *dst;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct timeval tv, tv_now;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (error & EVBUFFER_TIMEOUT) {
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (gettimeofday(&tv_now, NULL) == -1) {
|
|
||||||
relay_close(con, strerror(errno));
|
|
||||||
return;
|
|
||||||
@@ -1882,6 +1911,9 @@
|
|
||||||
relay_close(con, "buffer event timeout");
|
|
||||||
else
|
|
||||||
bufferevent_enable(cre->bev, EV_READ);
|
|
||||||
+#else
|
|
||||||
+ relay_close(con, "buffer event timeout");
|
|
||||||
+#endif
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (error & (EVBUFFER_READ|EVBUFFER_WRITE|EVBUFFER_EOF)) {
|
|
||||||
@@ -1934,8 +1966,10 @@
|
|
||||||
con->se_out.dst = &con->se_in;
|
|
||||||
con->se_in.con = con;
|
|
||||||
con->se_out.con = con;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
con->se_in.splicelen = -1;
|
|
||||||
con->se_out.splicelen = -1;
|
|
||||||
+#endif
|
|
||||||
con->se_relay = rlay;
|
|
||||||
con->se_id = ++relay_conid;
|
|
||||||
con->se_relayid = rlay->rl_conf.id;
|
|
||||||
@@ -1981,6 +2015,7 @@
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if (rlay->rl_conf.flags & F_DIVERT) {
|
|
||||||
slen = sizeof(con->se_out.ss);
|
|
||||||
if (getsockname(s, (struct sockaddr *)&con->se_out.ss,
|
|
||||||
@@ -1996,12 +2031,19 @@
|
|
||||||
con->se_out.port == rlay->rl_conf.port)
|
|
||||||
con->se_out.ss.ss_family = AF_UNSPEC;
|
|
||||||
} else if (rlay->rl_conf.flags & F_NATLOOK) {
|
|
||||||
+#else
|
|
||||||
+ if (rlay->rl_conf.flags & F_NATLOOK) {
|
|
||||||
+#endif
|
|
||||||
if ((cnl = (struct ctl_natlook *)
|
|
||||||
calloc(1, sizeof(struct ctl_natlook))) == NULL) {
|
|
||||||
relay_close(con, "failed to allocate nat lookup");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ }
|
|
||||||
|
|
||||||
+ if (rlay->rl_conf.flags & F_NATLOOK && cnl != NULL) {
|
|
||||||
+#endif
|
|
||||||
con->se_cnl = cnl;
|
|
||||||
bzero(cnl, sizeof(*cnl));
|
|
||||||
cnl->in = -1;
|
|
||||||
@@ -2605,8 +2647,12 @@
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/* Set session context to the local relay name */
|
|
||||||
- if (!SSL_CTX_set_session_id_context(ctx, rlay->rl_conf.name,
|
|
||||||
- strlen(rlay->rl_conf.name)))
|
|
||||||
+ if (!SSL_CTX_set_session_id_context(ctx,
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ (unsigned char*)rlay->rl_conf.name, strlen(rlay->rl_conf.name)))
|
|
||||||
+#else
|
|
||||||
+ rlay->rl_conf.name, strlen(rlay->rl_conf.name)))
|
|
||||||
+#endif
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
return (ctx);
|
|
||||||
@@ -2623,7 +2669,7 @@
|
|
||||||
{
|
|
||||||
struct relay *rlay = (struct relay *)con->se_relay;
|
|
||||||
SSL *ssl;
|
|
||||||
- const SSL_METHOD *method;
|
|
||||||
+ SSL_METHOD *method;
|
|
||||||
void (*cb)(int, short, void *);
|
|
||||||
u_int flags = EV_TIMEOUT;
|
|
||||||
|
|
||||||
@@ -3069,7 +3115,11 @@
|
|
||||||
if (fstat(fd, &st) != 0)
|
|
||||||
goto fail;
|
|
||||||
size = st.st_size;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
if ((buf = (char *)calloc(1, size + 1)) == NULL)
|
|
||||||
+#else
|
|
||||||
+ if ((buf = (u_int8_t *)calloc(1, size + 1)) == NULL)
|
|
||||||
+#endif
|
|
||||||
goto fail;
|
|
||||||
if (read(fd, buf, size) != size)
|
|
||||||
goto fail;
|
|
||||||
@@ -3077,7 +3127,11 @@
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
*len = size;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
return (buf);
|
|
||||||
+#else
|
|
||||||
+ return (char *)(buf);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
fail:
|
|
||||||
if (buf != NULL)
|
|
||||||
@@ -3107,7 +3161,7 @@
|
|
||||||
return (-1);
|
|
||||||
|
|
||||||
if (snprintf(certfile, sizeof(certfile),
|
|
||||||
- "/etc/ssl/%s.crt", hbuf) == -1)
|
|
||||||
+ "%%PREFIX%%/etc/ssl/%s.crt", hbuf) == -1)
|
|
||||||
return (-1);
|
|
||||||
if ((rlay->rl_ssl_cert = relay_load_file(certfile,
|
|
||||||
&rlay->rl_conf.ssl_cert_len)) == NULL)
|
|
||||||
@@ -3115,7 +3169,7 @@
|
|
||||||
log_debug("%s: using certificate %s", __func__, certfile);
|
|
||||||
|
|
||||||
if (snprintf(certfile, sizeof(certfile),
|
|
||||||
- "/etc/ssl/private/%s.key", hbuf) == -1)
|
|
||||||
+ "%%PREFIX%%/etc/ssl/private/%s.key", hbuf) == -1)
|
|
||||||
return -1;
|
|
||||||
if ((rlay->rl_ssl_key = relay_load_file(certfile,
|
|
||||||
&rlay->rl_conf.ssl_key_len)) == NULL)
|
|
@ -1,14 +0,0 @@
|
|||||||
--- relayd.orig/relay_udp.c 2011-05-22 01:06:39.460142978 +0200
|
|
||||||
+++ relayd/relay_udp.c 2011-05-22 01:06:54.703144104 +0200
|
|
||||||
@@ -16,7 +16,11 @@
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/param.h>
|
|
||||||
+#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/queue.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/stat.h>
|
|
@ -1,20 +0,0 @@
|
|||||||
--- relayd.orig/relayd.8 2011-05-22 01:06:39.464157989 +0200
|
|
||||||
+++ relayd/relayd.8 2011-05-22 01:06:54.705151889 +0200
|
|
||||||
@@ -114,7 +114,7 @@
|
|
||||||
.It Fl f Ar file
|
|
||||||
Specify an alternative configuration file.
|
|
||||||
The default is
|
|
||||||
-.Pa /etc/relayd.conf .
|
|
||||||
+.Pa %%PREFIX%%/etc/relayd.conf .
|
|
||||||
.It Fl n
|
|
||||||
Configtest mode.
|
|
||||||
Only check the configuration file for validity.
|
|
||||||
@@ -123,7 +123,7 @@
|
|
||||||
.El
|
|
||||||
.Sh FILES
|
|
||||||
.Bl -tag -width "/var/run/relayd.sockXX" -compact
|
|
||||||
-.It /etc/relayd.conf
|
|
||||||
+.It %%PREFIX%%/etc/relayd.conf
|
|
||||||
Default configuration file.
|
|
||||||
.It /var/run/relayd.sock
|
|
||||||
.Ux Ns -domain
|
|
@ -1,181 +0,0 @@
|
|||||||
--- relayd/relayd.c.orig 2011-05-19 10:56:49.000000000 +0200
|
|
||||||
+++ relayd/relayd.c 2011-05-22 10:34:12.913164741 +0200
|
|
||||||
@@ -17,7 +17,12 @@
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/param.h>
|
|
||||||
+#include <openssl/rand.h>
|
|
||||||
+#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#endif
|
|
||||||
#include <sys/queue.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
@@ -39,7 +44,11 @@
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sha.h>
|
|
||||||
+#else
|
|
||||||
#include <sha1.h>
|
|
||||||
+#endif
|
|
||||||
#include <md5.h>
|
|
||||||
|
|
||||||
#include <openssl/ssl.h>
|
|
||||||
@@ -150,6 +159,11 @@
|
|
||||||
struct relayd *env;
|
|
||||||
struct privsep *ps;
|
|
||||||
const char *conffile = CONF_FILE;
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#if __FreeBSD_version > 800040
|
|
||||||
+ u_int32_t rnd[256];
|
|
||||||
+#endif
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "dD:nf:v")) != -1) {
|
|
||||||
switch (c) {
|
|
||||||
@@ -220,6 +234,16 @@
|
|
||||||
else
|
|
||||||
log_info("startup");
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#if __FreeBSD_version > 800040
|
|
||||||
+ arc4random_stir();
|
|
||||||
+ arc4random_buf(rnd, sizeof(rnd));
|
|
||||||
+ RAND_seed(rnd, sizeof(rnd));
|
|
||||||
+#else
|
|
||||||
+ RAND_load_file("/dev/random",2048);
|
|
||||||
+#endif
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
ps->ps_instances[PROC_RELAY] = env->sc_prefork_relay;
|
|
||||||
proc_init(ps, procs, nitems(procs));
|
|
||||||
|
|
||||||
@@ -258,7 +282,9 @@
|
|
||||||
if (parent_configure(env) == -1)
|
|
||||||
fatalx("configuration failed");
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
init_routes(env);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
event_dispatch();
|
|
||||||
|
|
||||||
@@ -273,7 +299,9 @@
|
|
||||||
{
|
|
||||||
struct table *tb;
|
|
||||||
struct rdr *rdr;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct router *rt;
|
|
||||||
+#endif
|
|
||||||
struct protocol *proto;
|
|
||||||
struct relay *rlay;
|
|
||||||
int id;
|
|
||||||
@@ -284,8 +312,10 @@
|
|
||||||
config_settable(env, tb);
|
|
||||||
TAILQ_FOREACH(rdr, env->sc_rdrs, entry)
|
|
||||||
config_setrdr(env, rdr);
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
TAILQ_FOREACH(rt, env->sc_rts, rt_entry)
|
|
||||||
config_setrt(env, rt);
|
|
||||||
+#endif
|
|
||||||
TAILQ_FOREACH(proto, env->sc_protos, entry)
|
|
||||||
config_setproto(env, proto);
|
|
||||||
TAILQ_FOREACH(rlay, env->sc_relays, rl_entry)
|
|
||||||
@@ -359,9 +389,11 @@
|
|
||||||
|
|
||||||
proc_kill(env->sc_ps);
|
|
||||||
control_cleanup(&env->sc_ps->ps_csock);
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
carp_demote_shutdown();
|
|
||||||
if (env->sc_flags & F_DEMOTE)
|
|
||||||
carp_demote_reset(env->sc_demote_group, 128);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
free(env->sc_ps);
|
|
||||||
free(env);
|
|
||||||
@@ -375,12 +407,15 @@
|
|
||||||
parent_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg)
|
|
||||||
{
|
|
||||||
struct relayd *env = p->p_env;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct ctl_demote demote;
|
|
||||||
struct ctl_netroute crt;
|
|
||||||
+#endif
|
|
||||||
u_int v;
|
|
||||||
char *str = NULL;
|
|
||||||
|
|
||||||
switch (imsg->hdr.type) {
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case IMSG_DEMOTE:
|
|
||||||
IMSG_SIZE_CHECK(imsg, &demote);
|
|
||||||
memcpy(&demote, imsg->data, sizeof(demote));
|
|
||||||
@@ -391,6 +426,7 @@
|
|
||||||
memcpy(&crt, imsg->data, sizeof(crt));
|
|
||||||
pfe_route(env, &crt);
|
|
||||||
break;
|
|
||||||
+#endif
|
|
||||||
case IMSG_CTL_RESET:
|
|
||||||
IMSG_SIZE_CHECK(imsg, &v);
|
|
||||||
memcpy(&v, imsg->data, sizeof(v));
|
|
||||||
@@ -432,9 +468,11 @@
|
|
||||||
proc_compose_imsg(ps, PROC_HCE, -1, IMSG_SCRIPT,
|
|
||||||
-1, &scr, sizeof(scr));
|
|
||||||
break;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
case IMSG_SNMPSOCK:
|
|
||||||
(void)snmp_setsock(env, p->p_id);
|
|
||||||
break;
|
|
||||||
+#endif
|
|
||||||
case IMSG_CFG_DONE:
|
|
||||||
if (env->sc_reload)
|
|
||||||
env->sc_reload--;
|
|
||||||
@@ -645,6 +683,7 @@
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct netroute *
|
|
||||||
route_find(struct relayd *env, objid_t id)
|
|
||||||
{
|
|
||||||
@@ -666,6 +705,7 @@
|
|
||||||
return (rt);
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
struct host *
|
|
||||||
host_findbyname(struct relayd *env, const char *name)
|
|
||||||
@@ -840,7 +880,11 @@
|
|
||||||
{
|
|
||||||
switch (type) {
|
|
||||||
case DIGEST_SHA1:
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+ return (SHA1_Data(data, len, buf));
|
|
||||||
+#else
|
|
||||||
return (SHA1Data(data, len, buf));
|
|
||||||
+#endif
|
|
||||||
break;
|
|
||||||
case DIGEST_MD5:
|
|
||||||
return (MD5Data(data, len, buf));
|
|
||||||
@@ -1077,9 +1121,17 @@
|
|
||||||
bnd->bnd_proto == IPPROTO_TCP ? SOCK_STREAM : SOCK_DGRAM,
|
|
||||||
bnd->bnd_proto)) == -1)
|
|
||||||
goto fail;
|
|
||||||
+#ifdef SO_BINDANY
|
|
||||||
if (setsockopt(s, SOL_SOCKET, SO_BINDANY,
|
|
||||||
&v, sizeof(v)) == -1)
|
|
||||||
goto fail;
|
|
||||||
+#else
|
|
||||||
+#ifdef IP_BINDANY
|
|
||||||
+ if (setsockopt(s, IPPROTO_IP, IP_BINDANY,
|
|
||||||
+ &v, sizeof(v)) == -1)
|
|
||||||
+ goto fail;
|
|
||||||
+#endif
|
|
||||||
+#endif
|
|
||||||
if (bind(s, (struct sockaddr *)&bnd->bnd_ss,
|
|
||||||
bnd->bnd_ss.ss_len) == -1)
|
|
||||||
goto fail;
|
|
@ -1,244 +0,0 @@
|
|||||||
--- relayd/relayd.conf.5.orig 2011-05-05 12:20:24.000000000 +0200
|
|
||||||
+++ relayd/relayd.conf.5 2011-05-22 12:52:42.026190316 +0200
|
|
||||||
@@ -43,7 +43,7 @@
|
|
||||||
in a similar fashion to
|
|
||||||
.Xr pf 4
|
|
||||||
tables.
|
|
||||||
-They are used for relay, redirection, and router target selection with
|
|
||||||
+They are used for relay and redirection target selection with
|
|
||||||
the described options and health checking on the host they contain.
|
|
||||||
.It Sy Redirections
|
|
||||||
Redirections are translated to
|
|
||||||
@@ -55,9 +55,6 @@
|
|
||||||
general purpose TCP proxying on layer 7.
|
|
||||||
.It Sy Protocols
|
|
||||||
Protocols are predefined protocol handlers and settings for relays.
|
|
||||||
-.It Sy Routers
|
|
||||||
-Routers are used to insert routes with health-checked gateways for
|
|
||||||
-(WAN) link balancing.
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
Within the sections,
|
|
||||||
@@ -86,7 +83,7 @@
|
|
||||||
.Ic include
|
|
||||||
keyword, for example:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
-include "/etc/relayd.conf.local"
|
|
||||||
+include "%%PREFIX%%/etc/relayd.conf.local"
|
|
||||||
.Ed
|
|
||||||
.Sh MACROS
|
|
||||||
Macros can be defined that will later be expanded in context.
|
|
||||||
@@ -111,17 +108,6 @@
|
|
||||||
.Sh GLOBAL CONFIGURATION
|
|
||||||
Here are the settings that can be set globally:
|
|
||||||
.Bl -tag -width Ds
|
|
||||||
-.It Ic demote Ar group
|
|
||||||
-Enable the global
|
|
||||||
-.Xr carp 4
|
|
||||||
-demotion option, resetting the carp demotion counter for the
|
|
||||||
-specified interface group to zero on startup and to 128 on shutdown of
|
|
||||||
-the daemon.
|
|
||||||
-For more information on interface groups,
|
|
||||||
-see the
|
|
||||||
-.Ic group
|
|
||||||
-keyword in
|
|
||||||
-.Xr ifconfig 8 .
|
|
||||||
.It Ic interval Ar number
|
|
||||||
Set the interval in seconds at which the hosts will be checked.
|
|
||||||
The default interval is 10 seconds.
|
|
||||||
@@ -151,15 +137,6 @@
|
|
||||||
.Xr relayd 8
|
|
||||||
runs 5 relay processes by default and every process will handle
|
|
||||||
all configured relays.
|
|
||||||
-.It Ic send trap
|
|
||||||
-Send an SNMP trap when the state of a host changes.
|
|
||||||
-.Xr relayd 8
|
|
||||||
-will try to connect to
|
|
||||||
-.Xr snmpd 8
|
|
||||||
-and request it send a trap to the registered trap receivers;
|
|
||||||
-see
|
|
||||||
-.Xr snmpd.conf 5
|
|
||||||
-for more information about the configuration.
|
|
||||||
.It Ic timeout Ar number
|
|
||||||
Set the global timeout in milliseconds for checks.
|
|
||||||
This can be overridden by the timeout value in the table definitions.
|
|
||||||
@@ -363,17 +340,6 @@
|
|
||||||
.Pp
|
|
||||||
The following general table options are available:
|
|
||||||
.Bl -tag -width Ds
|
|
||||||
-.It Ic demote Ar group
|
|
||||||
-Enable the per-table
|
|
||||||
-.Xr carp 4
|
|
||||||
-demotion option.
|
|
||||||
-This will increment the carp demotion counter for the
|
|
||||||
-specified interface group if all hosts in the table are down.
|
|
||||||
-For more information on interface groups,
|
|
||||||
-see the
|
|
||||||
-.Ic group
|
|
||||||
-keyword in
|
|
||||||
-.Xr ifconfig 8 .
|
|
||||||
.It Ic interval Ar number
|
|
||||||
Override the global interval and specify one for this table.
|
|
||||||
It must be a multiple of the global interval.
|
|
||||||
@@ -605,7 +571,7 @@
|
|
||||||
.Ic destination
|
|
||||||
.Ar options ...
|
|
||||||
.Xc
|
|
||||||
-When redirecting connections with a divert-to rule in
|
|
||||||
+When redirecting connections with a rdr-to rule in
|
|
||||||
.Xr pf.conf 5
|
|
||||||
to a relay listening on localhost, this directive will
|
|
||||||
look up the real destination address of the intended target host,
|
|
||||||
@@ -613,14 +579,7 @@
|
|
||||||
If an additional
|
|
||||||
.Ic forward to
|
|
||||||
directive to a specified address or table is present,
|
|
||||||
-it will be used as a backup if the lookup failed.
|
|
||||||
-.It Xo
|
|
||||||
-.Ic forward to
|
|
||||||
-.Ic nat lookup
|
|
||||||
-.Ar options ...
|
|
||||||
-.Xc
|
|
||||||
-Like the previous directive, but for redirections with rdr-to in
|
|
||||||
-.Xr pf.conf 5 .
|
|
||||||
+it will be used as a backup if the NAT lookup failed.
|
|
||||||
.It Xo
|
|
||||||
.Ic listen on Ar address
|
|
||||||
.Op Ic port Ar port
|
|
||||||
@@ -639,9 +598,9 @@
|
|
||||||
keyword is present, the relay will accept connections using the
|
|
||||||
encrypted SSL protocol.
|
|
||||||
The relay will look up a private key in
|
|
||||||
-.Pa /etc/ssl/private/address.key
|
|
||||||
+.Pa %%PREFIX%%/etc/ssl/private/address.key
|
|
||||||
and a public certificate in
|
|
||||||
-.Pa /etc/ssl/address.crt ,
|
|
||||||
+.Pa %%PREFIX%%/etc/ssl/address.crt ,
|
|
||||||
where
|
|
||||||
.Ar address
|
|
||||||
is the specified IP address of the relay to listen on.
|
|
||||||
@@ -990,9 +949,6 @@
|
|
||||||
This option enables CA verification in SSL client mode.
|
|
||||||
The daemon will load the CA (Certificate Authority) certificates from
|
|
||||||
the specified path to verify the server certificates.
|
|
||||||
-.Ox
|
|
||||||
-provides a default CA bundle in
|
|
||||||
-.Pa /etc/ssl/cert.pem .
|
|
||||||
.It Ic ciphers Ar string
|
|
||||||
Set the string defining the SSL cipher suite.
|
|
||||||
If not specified, the default value
|
|
||||||
@@ -1068,89 +1024,22 @@
|
|
||||||
Set the socket-level buffer size for input and output for this
|
|
||||||
connection.
|
|
||||||
This will affect the TCP window size.
|
|
||||||
-.It Xo
|
|
||||||
-.Op Ic no
|
|
||||||
-.Ic splice
|
|
||||||
-.Xc
|
|
||||||
-Use socket splicing for zero-copy data transfer.
|
|
||||||
-This option is enabled by default.
|
|
||||||
.El
|
|
||||||
.El
|
|
||||||
-.Sh ROUTERS
|
|
||||||
-Routers represent routing table entries in the kernel forwarding
|
|
||||||
-database, see
|
|
||||||
-.Xr route 4 ,
|
|
||||||
-and a table of associated gateways.
|
|
||||||
-They are used to dynamically insert or remove routes with gateways
|
|
||||||
-based on their availability and health-check results.
|
|
||||||
-A router can include multiple network statements and a single forward
|
|
||||||
-statement with a table of one or more gateways.
|
|
||||||
-All entries in a single router directive must match the same address
|
|
||||||
-family, either IPv4 or IPv6.
|
|
||||||
-.Pp
|
|
||||||
-The kernel supports multipath routing when multiple gateways exist to
|
|
||||||
-the same destination address.
|
|
||||||
-The multipath routing behaviour can be changed globally using the
|
|
||||||
-.Xr sysctl 8
|
|
||||||
-variables
|
|
||||||
-.Va net.inet.ip.multipath
|
|
||||||
-and
|
|
||||||
-.Va net.inet6.ip6.multipath .
|
|
||||||
-With the default setting of 0,
|
|
||||||
-the first route selected will be used for subsequent packets to that
|
|
||||||
-destination regardless of source.
|
|
||||||
-Setting it to 1 will enable load balancing based on the packet source
|
|
||||||
-address across gateways; multiple routes with the same priority are
|
|
||||||
-used equally.
|
|
||||||
-The kernel will also check the link state of the related network
|
|
||||||
-interface and try a different route if it is not active.
|
|
||||||
-.Pp
|
|
||||||
-The configuration directives that are valid in the
|
|
||||||
-.Ic routers
|
|
||||||
-context are described below:
|
|
||||||
-.Bl -tag -width Ds
|
|
||||||
-.It Xo
|
|
||||||
-.Ic forward to
|
|
||||||
-.Aq Ar table
|
|
||||||
-.Ic port Ar number
|
|
||||||
-.Ar options ...
|
|
||||||
-.Xc
|
|
||||||
-Specify the table of target gateways to be used; see the
|
|
||||||
-.Sx TABLES
|
|
||||||
-section above for information about table options.
|
|
||||||
-This entry is mandatory and must be specified once.
|
|
||||||
-.It Xo
|
|
||||||
-.Ic route
|
|
||||||
-.Ar address Ns Li / Ns Ar prefix
|
|
||||||
-.Xc
|
|
||||||
-Specify the network address and prefix length of a route destination
|
|
||||||
-that is reachable via the active gateways.
|
|
||||||
-This entry must be specified at least once in a router directive.
|
|
||||||
-.It Ic rtable Ar id
|
|
||||||
-Add the routes to the kernel routing table with the specified
|
|
||||||
-.Ar id .
|
|
||||||
-.It Ic rtlabel Ar label
|
|
||||||
-Add the routes with the specified
|
|
||||||
-.Ar label
|
|
||||||
-to the kernel routing table.
|
|
||||||
-.El
|
|
||||||
.Sh FILES
|
|
||||||
-.Bl -tag -width "/etc/ssl/private/address.keyXX" -compact
|
|
||||||
-.It Pa /etc/relayd.conf
|
|
||||||
+.Bl -tag -width "%%PREFIX%%/etc/ssl/private/address.keyXX" -compact
|
|
||||||
+.It Pa %%PREFIX%%/etc/relayd.conf
|
|
||||||
.Xr relayd 8
|
|
||||||
configuration file.
|
|
||||||
.Pp
|
|
||||||
.It Pa /etc/services
|
|
||||||
Service name database.
|
|
||||||
.Pp
|
|
||||||
-.It Pa /etc/ssl/address.crt
|
|
||||||
-.It Pa /etc/ssl/private/address.key
|
|
||||||
+.It Pa %%PREFIX%%/etc/ssl/address.crt
|
|
||||||
+.It Pa %%PREFIX%%/etc/ssl/private/address.key
|
|
||||||
Location of the relay SSL server certificates, where
|
|
||||||
.Ar address
|
|
||||||
is the configured IP address of the relay.
|
|
||||||
-.It Pa /etc/ssl/cert.pem
|
|
||||||
-Default location of the CA bundle that can be used with
|
|
||||||
-.Xr relayd 8 .
|
|
||||||
.El
|
|
||||||
.Sh EXAMPLES
|
|
||||||
This configuration file would create a redirection service
|
|
||||||
@@ -1242,20 +1131,9 @@
|
|
||||||
forward to shell.example.com port 22
|
|
||||||
}
|
|
||||||
.Ed
|
|
||||||
-.Pp
|
|
||||||
-The next simple router configuration example can be used to run
|
|
||||||
-redundant, health-checked WAN links:
|
|
||||||
-.Bd -literal -offset indent
|
|
||||||
-table \*(Ltgateways\*(Gt { $gw1 ip ttl 1, $gw2 ip ttl 1 }
|
|
||||||
-router "uplinks" {
|
|
||||||
- route 0.0.0.0/0
|
|
||||||
- forward to \*(Ltgateways\*(Gt check icmp
|
|
||||||
-}
|
|
||||||
-.Ed
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr relayctl 8 ,
|
|
||||||
.Xr relayd 8 ,
|
|
||||||
-.Xr snmpd 8 ,
|
|
||||||
.Xr ssl 8
|
|
||||||
.Sh HISTORY
|
|
||||||
The
|
|
@ -1,189 +0,0 @@
|
|||||||
--- relayd/relayd.h.orig 2011-05-26 18:42:14.000000000 +0200
|
|
||||||
+++ relayd/relayd.h 2011-05-26 18:44:44.868614096 +0200
|
|
||||||
@@ -21,10 +21,18 @@
|
|
||||||
#include <sys/tree.h>
|
|
||||||
|
|
||||||
#include <sys/param.h> /* MAXHOSTNAMELEN */
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#include <sys/queue.h>
|
|
||||||
+#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
|
|
||||||
+#endif
|
|
||||||
#include <limits.h>
|
|
||||||
#include <imsg.h>
|
|
||||||
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#define CONF_FILE "%%PREFIX%%/etc/relayd.conf"
|
|
||||||
+#else
|
|
||||||
#define CONF_FILE "/etc/relayd.conf"
|
|
||||||
+#endif
|
|
||||||
#define RELAYD_SOCKET "/var/run/relayd.sock"
|
|
||||||
#define PF_SOCKET "/dev/pf"
|
|
||||||
#define RELAYD_USER "_relayd"
|
|
||||||
@@ -63,7 +71,18 @@
|
|
||||||
#define SMALL_READ_BUF_SIZE 1024
|
|
||||||
#define ICMP_BUF_SIZE 64
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
#define SNMP_RECONNECT_TIMEOUT { 3, 0 } /* sec, usec */
|
|
||||||
+#else
|
|
||||||
+#define SIMPLEQ_HEAD STAILQ_HEAD
|
|
||||||
+#define SIMPLEQ_FIRST STAILQ_FIRST
|
|
||||||
+#define SIMPLEQ_REMOVE_HEAD STAILQ_REMOVE_HEAD
|
|
||||||
+#define SIMPLEQ_ENTRY STAILQ_ENTRY
|
|
||||||
+#define SIMPLEQ_INIT STAILQ_INIT
|
|
||||||
+#define SIMPLEQ_EMPTY STAILQ_EMPTY
|
|
||||||
+#define SIMPLEQ_NEXT STAILQ_NEXT
|
|
||||||
+#define SIMPLEQ_INSERT_TAIL STAILQ_INSERT_TAIL
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#if DEBUG > 1
|
|
||||||
#define DPRINTF log_debug
|
|
||||||
@@ -626,6 +645,7 @@
|
|
||||||
};
|
|
||||||
#define RELAY_DSTMODE_DEFAULT RELAY_DSTMODE_ROUNDROBIN
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct router;
|
|
||||||
struct netroute_config {
|
|
||||||
objid_t id;
|
|
||||||
@@ -672,6 +692,7 @@
|
|
||||||
struct netroute_config nr;
|
|
||||||
struct router_config rt;
|
|
||||||
};
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* initially control.h */
|
|
||||||
struct control_sock {
|
|
||||||
@@ -757,12 +778,18 @@
|
|
||||||
IMSG_HOST_STATUS, /* notifies from hce to pfe */
|
|
||||||
IMSG_SYNC,
|
|
||||||
IMSG_NATLOOK,
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
IMSG_DEMOTE,
|
|
||||||
+#endif
|
|
||||||
IMSG_STATISTICS,
|
|
||||||
IMSG_SCRIPT,
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
IMSG_SNMPSOCK,
|
|
||||||
+#endif
|
|
||||||
IMSG_BINDANY,
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
IMSG_RTMSG, /* from pfe to parent */
|
|
||||||
+#endif
|
|
||||||
IMSG_CFG_TABLE, /* configuration from parent */
|
|
||||||
IMSG_CFG_HOST,
|
|
||||||
IMSG_CFG_RDR,
|
|
||||||
@@ -830,14 +857,18 @@
|
|
||||||
u_int32_t sc_flags;
|
|
||||||
const char *sc_conffile;
|
|
||||||
struct pfdata *sc_pf;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int sc_rtsock;
|
|
||||||
int sc_rtseq;
|
|
||||||
+#endif
|
|
||||||
int sc_tablecount;
|
|
||||||
int sc_rdrcount;
|
|
||||||
int sc_protocount;
|
|
||||||
int sc_relaycount;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int sc_routercount;
|
|
||||||
int sc_routecount;
|
|
||||||
+#endif
|
|
||||||
struct timeval sc_interval;
|
|
||||||
struct timeval sc_timeout;
|
|
||||||
struct table sc_empty_table;
|
|
||||||
@@ -847,8 +878,10 @@
|
|
||||||
struct rdrlist *sc_rdrs;
|
|
||||||
struct protolist *sc_protos;
|
|
||||||
struct relaylist *sc_relays;
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct routerlist *sc_rts;
|
|
||||||
struct netroutelist *sc_routes;
|
|
||||||
+#endif
|
|
||||||
u_int16_t sc_prefork_relay;
|
|
||||||
char sc_demote_group[IFNAMSIZ];
|
|
||||||
u_int16_t sc_id;
|
|
||||||
@@ -856,10 +889,11 @@
|
|
||||||
struct event sc_statev;
|
|
||||||
struct timeval sc_statinterval;
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int sc_snmp;
|
|
||||||
struct event sc_snmpto;
|
|
||||||
struct event sc_snmpev;
|
|
||||||
-
|
|
||||||
+#endif
|
|
||||||
int sc_has_icmp;
|
|
||||||
int sc_has_icmp6;
|
|
||||||
struct ctl_icmp_event sc_icmp_send;
|
|
||||||
@@ -927,10 +961,12 @@
|
|
||||||
u_int64_t
|
|
||||||
check_table(struct relayd *, struct rdr *, struct table *);
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
/* pfe_route.c */
|
|
||||||
void init_routes(struct relayd *);
|
|
||||||
void sync_routes(struct relayd *, struct router *);
|
|
||||||
int pfe_route(struct relayd *, struct ctl_netroute *);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* hce.c */
|
|
||||||
pid_t hce(struct privsep *, struct privsep_proc *);
|
|
||||||
@@ -947,8 +983,10 @@
|
|
||||||
void relay_session(struct rsession *);
|
|
||||||
int relay_from_table(struct rsession *);
|
|
||||||
int relay_socket_af(struct sockaddr_storage *, in_port_t);
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
in_port_t
|
|
||||||
relay_socket_getport(struct sockaddr_storage *);
|
|
||||||
+#endif
|
|
||||||
int relay_cmp_af(struct sockaddr_storage *,
|
|
||||||
struct sockaddr_storage *);
|
|
||||||
|
|
||||||
@@ -990,8 +1028,10 @@
|
|
||||||
struct host *host_find(struct relayd *, objid_t);
|
|
||||||
struct table *table_find(struct relayd *, objid_t);
|
|
||||||
struct rdr *rdr_find(struct relayd *, objid_t);
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
struct netroute *route_find(struct relayd *, objid_t);
|
|
||||||
struct router *router_find(struct relayd *, objid_t);
|
|
||||||
+#endif
|
|
||||||
struct host *host_findbyname(struct relayd *, const char *);
|
|
||||||
struct table *table_findbyname(struct relayd *, const char *);
|
|
||||||
struct table *table_findbyconf(struct relayd *, struct table *);
|
|
||||||
@@ -1039,11 +1079,13 @@
|
|
||||||
void pn_unref(u_int16_t);
|
|
||||||
void pn_ref(u_int16_t);
|
|
||||||
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
/* snmp.c */
|
|
||||||
void snmp_init(struct relayd *, enum privsep_procid);
|
|
||||||
int snmp_setsock(struct relayd *, enum privsep_procid);
|
|
||||||
int snmp_getsock(struct relayd *, struct imsg *);
|
|
||||||
void snmp_hosttrap(struct relayd *, struct table *, struct host *);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* shuffle.c */
|
|
||||||
void shuffle_init(struct shuffle *);
|
|
||||||
@@ -1096,9 +1138,11 @@
|
|
||||||
int config_setrdr(struct relayd *, struct rdr *);
|
|
||||||
int config_getrdr(struct relayd *, struct imsg *);
|
|
||||||
int config_getvirt(struct relayd *, struct imsg *);
|
|
||||||
+#ifndef __FreeBSD__
|
|
||||||
int config_setrt(struct relayd *, struct router *);
|
|
||||||
int config_getrt(struct relayd *, struct imsg *);
|
|
||||||
int config_getroute(struct relayd *, struct imsg *);
|
|
||||||
+#endif
|
|
||||||
int config_setproto(struct relayd *env, struct protocol *);
|
|
||||||
int config_getproto(struct relayd *, struct imsg *);
|
|
||||||
int config_setprotonode(struct relayd *, enum privsep_procid,
|
|
||||||
@@ -1106,3 +1150,9 @@
|
|
||||||
int config_getprotonode(struct relayd *, struct imsg *);
|
|
||||||
int config_setrelay(struct relayd *env, struct relay *);
|
|
||||||
int config_getrelay(struct relayd *, struct imsg *);
|
|
||||||
+
|
|
||||||
+#ifdef __FreeBSD__
|
|
||||||
+#if __FreeBSD_version < 800041
|
|
||||||
+u_int32_t arc4random_uniform(u_int32_t upper_bound);
|
|
||||||
+#endif
|
|
||||||
+#endif
|
|
@ -1,3 +1,5 @@
|
|||||||
|
This is the FreeBSD port of the OpenBSD relayd and relayctl.
|
||||||
|
|
||||||
relayd is a daemon to relay and dynamically redirect incoming connections
|
relayd is a daemon to relay and dynamically redirect incoming connections
|
||||||
to a target host. Its main purposes are to run as a load-balancer,
|
to a target host. Its main purposes are to run as a load-balancer,
|
||||||
application layer gateway, or transparent proxy. The daemon is able to
|
application layer gateway, or transparent proxy. The daemon is able to
|
||||||
@ -13,4 +15,6 @@ carp
|
|||||||
routers
|
routers
|
||||||
snmp
|
snmp
|
||||||
|
|
||||||
WWW: http://spootnik.org/relayd/
|
The relayctl program controls the relayd(8) daemon.
|
||||||
|
|
||||||
|
WWW: https://github.com/mmatuska/relayd
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
@unexec if cmp -s %D/etc/relayd.conf %D/etc/relayd.conf.sample; then rm -f %D/etc/relayd.conf; fi
|
||||||
etc/relayd.conf.sample
|
etc/relayd.conf.sample
|
||||||
sbin/relayctl
|
sbin/relayctl
|
||||||
sbin/relayd
|
sbin/relayd
|
||||||
@unexec echo "Warning: If you will *NOT* use this package anymore, please remove the _relayd user manually."
|
|
||||||
|
Loading…
Reference in New Issue
Block a user