diff options
Diffstat (limited to 'main/ipsec-tools/fd-priorities.patch')
-rw-r--r-- | main/ipsec-tools/fd-priorities.patch | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/main/ipsec-tools/fd-priorities.patch b/main/ipsec-tools/fd-priorities.patch new file mode 100644 index 000000000..68fc4b345 --- /dev/null +++ b/main/ipsec-tools/fd-priorities.patch @@ -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 */ |