mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-05-05 04:16:46 +02:00
main/ipsec-tools: add patch for fd priorities
it improves admin port responsiveness under high load.
This commit is contained in:
parent
cab470b7a8
commit
a545b82478
@ -2,7 +2,7 @@
|
||||
pkgname=ipsec-tools
|
||||
pkgver=0.8_alpha20090903
|
||||
_myver=0.8-alpha20090903
|
||||
pkgrel=5
|
||||
pkgrel=6
|
||||
pkgdesc="User-space IPsec tools for various IPsec implementations"
|
||||
url="http://ipsec-tools.sourceforge.net/"
|
||||
license="BSD"
|
||||
@ -15,6 +15,7 @@ source="http://downloads.sourceforge.net/$pkgname/$pkgname-$_myver.tar.gz
|
||||
50-reverse-connect.patch
|
||||
60-debug-quick.patch
|
||||
initial-contact-fix.diff
|
||||
fd-priorities.patch
|
||||
"
|
||||
|
||||
_builddir="$srcdir"/$pkgname-$_myver
|
||||
@ -60,4 +61,5 @@ md5sums="8ec28d4e89c0f5e49ae2caa7463fbcfd ipsec-tools-0.8-alpha20090903.tar.gz
|
||||
2d00250cf72da7f2f559c91b65a48747 racoon.confd
|
||||
13bda94a598aabf593280e04ea16065d 50-reverse-connect.patch
|
||||
baa13d7f0f48955c792f7fcd42a8587a 60-debug-quick.patch
|
||||
69e06c5cc3a0c1cc8b10ddc89d1e644b initial-contact-fix.diff"
|
||||
69e06c5cc3a0c1cc8b10ddc89d1e644b initial-contact-fix.diff
|
||||
c1e8b8dc80ef4b5d79fece52a4865e68 fd-priorities.patch"
|
||||
|
||||
285
main/ipsec-tools/fd-priorities.patch
Normal file
285
main/ipsec-tools/fd-priorities.patch
Normal file
@ -0,0 +1,285 @@
|
||||
? .msg
|
||||
? ChangeLog
|
||||
? alpine-config
|
||||
? commiters.txt
|
||||
? fd-priorities-2.patch
|
||||
? fd-priorities.patch
|
||||
? ipsec-tools-0.8-alpha20090820.tar.bz2
|
||||
? ipsec-tools-0.8-alpha20090903.tar.bz2
|
||||
? local-changes.diff
|
||||
? patch-to-support-cast128-cbc-algorithm.patch
|
||||
? racoon.txt
|
||||
? rpm/Makefile
|
||||
? rpm/Makefile.in
|
||||
? rpm/ipsec-tools.spec
|
||||
? rpm/suse/Makefile
|
||||
? rpm/suse/Makefile.in
|
||||
? rpm/suse/ipsec-tools.spec
|
||||
? src/Makefile
|
||||
? src/Makefile.in
|
||||
? src/include-glibc/.includes
|
||||
? src/include-glibc/Makefile
|
||||
? src/include-glibc/Makefile.in
|
||||
? src/libipsec/.deps
|
||||
? src/libipsec/.libs
|
||||
? src/libipsec/Makefile
|
||||
? src/libipsec/Makefile.in
|
||||
? src/libipsec/ipsec_dump_policy.lo
|
||||
? src/libipsec/ipsec_get_policylen.lo
|
||||
? src/libipsec/ipsec_strerror.lo
|
||||
? src/libipsec/key_debug.lo
|
||||
? src/libipsec/libipsec.la
|
||||
? src/libipsec/pfkey.lo
|
||||
? src/libipsec/pfkey_dump.lo
|
||||
? src/libipsec/policy_parse.c
|
||||
? src/libipsec/policy_parse.h
|
||||
? src/libipsec/policy_parse.lo
|
||||
? src/libipsec/policy_token.c
|
||||
? src/libipsec/policy_token.lo
|
||||
? src/racoon/.deps
|
||||
? src/racoon/.libs
|
||||
? src/racoon/Makefile
|
||||
? src/racoon/Makefile.in
|
||||
? src/racoon/cfparse.c
|
||||
? src/racoon/cfparse.h
|
||||
? src/racoon/cftoken.c
|
||||
? src/racoon/eaytest
|
||||
? src/racoon/libracoon.la
|
||||
? src/racoon/libracoon_la-kmpstat.lo
|
||||
? src/racoon/libracoon_la-misc.lo
|
||||
? src/racoon/libracoon_la-sockmisc.lo
|
||||
? src/racoon/libracoon_la-vmbuf.lo
|
||||
? src/racoon/plainrsa-gen
|
||||
? src/racoon/prsa_par.c
|
||||
? src/racoon/prsa_par.h
|
||||
? src/racoon/prsa_tok.c
|
||||
? src/racoon/racoon
|
||||
? src/racoon/racoonctl
|
||||
? src/racoon/samples/psk.txt
|
||||
? src/racoon/samples/racoon.conf
|
||||
? src/setkey/.deps
|
||||
? src/setkey/.libs
|
||||
? src/setkey/Makefile
|
||||
? src/setkey/Makefile.in
|
||||
? src/setkey/parse.c
|
||||
? src/setkey/parse.h
|
||||
? src/setkey/setkey
|
||||
? src/setkey/token.c
|
||||
Index: src/racoon/admin.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/admin.c,v
|
||||
retrieving revision 1.32
|
||||
diff -u -r1.32 admin.c
|
||||
--- a/src/racoon/admin.c 3 Sep 2009 09:29:07 -0000 1.32
|
||||
+++ b/src/racoon/admin.c 9 Mar 2010 07:50:46 -0000
|
||||
@@ -734,7 +734,7 @@
|
||||
return -1;
|
||||
}
|
||||
|
||||
- monitor_fd(lcconf->sock_admin, admin_handler, NULL);
|
||||
+ monitor_fd(lcconf->sock_admin, admin_handler, NULL, 0);
|
||||
plog(LLV_DEBUG, LOCATION, NULL,
|
||||
"open %s as racoon management.\n", sunaddr.sun_path);
|
||||
|
||||
Index: src/racoon/evt.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/evt.c,v
|
||||
retrieving revision 1.9
|
||||
diff -u -r1.9 evt.c
|
||||
--- a/src/racoon/evt.c 23 Jan 2009 08:05:58 -0000 1.9
|
||||
+++ b/src/racoon/evt.c 9 Mar 2010 07:50:46 -0000
|
||||
@@ -373,7 +373,7 @@
|
||||
|
||||
LIST_INSERT_HEAD(list, l, ll_chain);
|
||||
l->fd = fd;
|
||||
- monitor_fd(l->fd, evt_unsubscribe_cb, l);
|
||||
+ monitor_fd(l->fd, evt_unsubscribe_cb, l, 0);
|
||||
|
||||
plog(LLV_DEBUG, LOCATION, NULL,
|
||||
"[%d] admin connection is polling events\n", fd);
|
||||
Index: src/racoon/grabmyaddr.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c,v
|
||||
retrieving revision 1.23
|
||||
diff -u -r1.23 grabmyaddr.c
|
||||
--- a/src/racoon/grabmyaddr.c 3 Jul 2009 06:41:46 -0000 1.23
|
||||
+++ b/src/racoon/grabmyaddr.c 9 Mar 2010 07:50:46 -0000
|
||||
@@ -296,7 +296,7 @@
|
||||
lcconf->rtsock = kernel_open_socket();
|
||||
if (lcconf->rtsock < 0)
|
||||
return -1;
|
||||
- monitor_fd(lcconf->rtsock, kernel_receive, NULL);
|
||||
+ monitor_fd(lcconf->rtsock, kernel_receive, NULL, 0);
|
||||
} else {
|
||||
lcconf->rtsock = -1;
|
||||
if (!myaddr_open_all_configured(NULL))
|
||||
Index: src/racoon/isakmp.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/isakmp.c,v
|
||||
retrieving revision 1.60
|
||||
diff -u -r1.60 isakmp.c
|
||||
--- a/src/racoon/isakmp.c 3 Sep 2009 09:29:07 -0000 1.60
|
||||
+++ b/src/racoon/isakmp.c 9 Mar 2010 07:50:48 -0000
|
||||
@@ -1720,7 +1720,7 @@
|
||||
"%s used as isakmp port (fd=%d)\n",
|
||||
saddr2str(addr), fd);
|
||||
|
||||
- monitor_fd(fd, isakmp_handler, NULL);
|
||||
+ monitor_fd(fd, isakmp_handler, NULL, 1);
|
||||
return fd;
|
||||
|
||||
err:
|
||||
Index: src/racoon/pfkey.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/pfkey.c,v
|
||||
retrieving revision 1.52
|
||||
diff -u -r1.52 pfkey.c
|
||||
--- a/src/racoon/pfkey.c 9 Feb 2010 23:05:16 -0000 1.52
|
||||
+++ b/src/racoon/pfkey.c 9 Mar 2010 07:50:49 -0000
|
||||
@@ -487,7 +487,7 @@
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
- monitor_fd(lcconf->sock_pfkey, pfkey_handler, NULL);
|
||||
+ monitor_fd(lcconf->sock_pfkey, pfkey_handler, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Index: src/racoon/session.c
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/session.c,v
|
||||
retrieving revision 1.27
|
||||
diff -u -r1.27 session.c
|
||||
--- a/src/racoon/session.c 4 Mar 2010 15:13:53 -0000 1.27
|
||||
+++ b/src/racoon/session.c 9 Mar 2010 07:50:50 -0000
|
||||
@@ -103,8 +103,13 @@
|
||||
struct fd_monitor {
|
||||
int (*callback)(void *ctx, int fd);
|
||||
void *ctx;
|
||||
+ int prio;
|
||||
+ int fd;
|
||||
+ TAILQ_ENTRY(fd_monitor) chain;
|
||||
};
|
||||
|
||||
+#define NUM_PRIORITIES 2
|
||||
+
|
||||
static void close_session __P((void));
|
||||
static void initfds __P((void));
|
||||
static void init_signal __P((void));
|
||||
@@ -115,13 +120,14 @@
|
||||
|
||||
static fd_set preset_mask, active_mask;
|
||||
static struct fd_monitor fd_monitors[FD_SETSIZE];
|
||||
+static TAILQ_HEAD(fd_monitor_list, fd_monitor) fd_monitor_tree[NUM_PRIORITIES];
|
||||
static int nfds = 0;
|
||||
|
||||
static volatile sig_atomic_t sigreq[NSIG + 1];
|
||||
static struct sched scflushsa = SCHED_INITIALIZER();
|
||||
|
||||
void
|
||||
-monitor_fd(int fd, int (*callback)(void *, int), void *ctx)
|
||||
+monitor_fd(int fd, int (*callback)(void *, int), void *ctx, int priority)
|
||||
{
|
||||
if (fd < 0 || fd >= FD_SETSIZE) {
|
||||
plog(LLV_ERROR, LOCATION, NULL, "fd_set overrun");
|
||||
@@ -131,9 +137,17 @@
|
||||
FD_SET(fd, &preset_mask);
|
||||
if (fd > nfds)
|
||||
nfds = fd;
|
||||
+ if (priority <= 0)
|
||||
+ priority = 0;
|
||||
+ if (priority >= NUM_PRIORITIES)
|
||||
+ priority = NUM_PRIORITIES - 1;
|
||||
|
||||
fd_monitors[fd].callback = callback;
|
||||
fd_monitors[fd].ctx = ctx;
|
||||
+ fd_monitors[fd].prio = priority;
|
||||
+ fd_monitors[fd].fd = fd;
|
||||
+ TAILQ_INSERT_TAIL(&fd_monitor_tree[priority],
|
||||
+ &fd_monitors[fd], chain);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -144,10 +158,15 @@
|
||||
exit(1);
|
||||
}
|
||||
|
||||
+ if (fd_monitors[fd].callback == NULL)
|
||||
+ return;
|
||||
+
|
||||
FD_CLR(fd, &preset_mask);
|
||||
FD_CLR(fd, &active_mask);
|
||||
fd_monitors[fd].callback = NULL;
|
||||
fd_monitors[fd].ctx = NULL;
|
||||
+ TAILQ_REMOVE(&fd_monitor_tree[fd_monitors[fd].prio],
|
||||
+ &fd_monitors[fd], chain);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -158,11 +177,15 @@
|
||||
char pid_file[MAXPATHLEN];
|
||||
FILE *fp;
|
||||
pid_t racoon_pid = 0;
|
||||
- int i;
|
||||
+ int i, count;
|
||||
+ struct fd_monitor *fdm;
|
||||
|
||||
nfds = 0;
|
||||
FD_ZERO(&preset_mask);
|
||||
|
||||
+ for (i = 0; i < NUM_PRIORITIES; i++)
|
||||
+ TAILQ_INIT(&fd_monitor_tree[i]);
|
||||
+
|
||||
/* initialize schedular */
|
||||
sched_init();
|
||||
init_signal();
|
||||
@@ -291,16 +314,24 @@
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
- for (i = 0; i <= nfds; i++) {
|
||||
- if (!FD_ISSET(i, &active_mask))
|
||||
- continue;
|
||||
-
|
||||
- if (fd_monitors[i].callback != NULL)
|
||||
- fd_monitors[i].callback(fd_monitors[i].ctx, i);
|
||||
- else
|
||||
- plog(LLV_ERROR, LOCATION, NULL,
|
||||
- "fd %d set, but no active callback\n", i);
|
||||
+ count = 0;
|
||||
+ for (i = 0; i < NUM_PRIORITIES; i++) {
|
||||
+ TAILQ_FOREACH(fdm, &fd_monitor_tree[i], chain) {
|
||||
+ if (!FD_ISSET(fdm->fd, &active_mask))
|
||||
+ continue;
|
||||
+
|
||||
+ FD_CLR(fdm->fd, &active_mask);
|
||||
+ if (fdm->callback != NULL) {
|
||||
+ fdm->callback(fdm->ctx, fdm->fd);
|
||||
+ count++;
|
||||
+ } else
|
||||
+ plog(LLV_ERROR, LOCATION, NULL,
|
||||
+ "fd %d set, but no active callback\n", i);
|
||||
+ }
|
||||
+ if (count != 0)
|
||||
+ break;
|
||||
}
|
||||
+
|
||||
}
|
||||
}
|
||||
|
||||
Index: src/racoon/session.h
|
||||
===================================================================
|
||||
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/session.h,v
|
||||
retrieving revision 1.8
|
||||
diff -u -r1.8 session.h
|
||||
--- a/src/racoon/session.h 23 Jan 2009 08:05:58 -0000 1.8
|
||||
+++ b/src/racoon/session.h 9 Mar 2010 07:50:50 -0000
|
||||
@@ -37,7 +37,7 @@
|
||||
extern int session __P((void));
|
||||
extern RETSIGTYPE signal_handler __P((int));
|
||||
|
||||
-extern void monitor_fd __P((int fd, int (*callback)(void *, int), void *ctx));
|
||||
+extern void monitor_fd __P((int fd, int (*callback)(void *, int), void *ctx, int priority));
|
||||
extern void unmonitor_fd __P((int fd));
|
||||
|
||||
#endif /* _SESSION_H */
|
||||
Loading…
x
Reference in New Issue
Block a user