summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/solaris.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/solaris.c')
-rw-r--r--contrib/ipfilter/solaris.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/contrib/ipfilter/solaris.c b/contrib/ipfilter/solaris.c
index 7960786..761ce55 100644
--- a/contrib/ipfilter/solaris.c
+++ b/contrib/ipfilter/solaris.c
@@ -6,7 +6,7 @@
* to the original author and the contributors.
*/
/* #pragma ident "@(#)solaris.c 1.12 6/5/96 (C) 1995 Darren Reed"*/
-#pragma ident "@(#)$Id: solaris.c,v 2.1.2.11 1999/12/04 03:33:59 darrenr Exp $"
+#pragma ident "@(#)$Id: solaris.c,v 2.1.2.14 2000/01/25 15:32:03 darrenr Exp $"
#include <sys/systm.h>
#include <sys/types.h>
@@ -937,6 +937,8 @@ again:
void ipf_synctimeout(arg)
void *arg;
{
+ if (fr_running < 0)
+ return;
READ_ENTER(&ipf_solaris);
ipfsync();
WRITE_ENTER(&ipfs_mutex);
@@ -1327,8 +1329,10 @@ int ipfsync()
/*
* Resync. any NAT `connections' using this interface and its IP #.
*/
- for (il = ill_g_head; il; il = il->ill_next)
+ for (il = ill_g_head; il; il = il->ill_next) {
ip_natsync((void *)il);
+ ip_statesync((void *)il);
+ }
return 0;
}
@@ -1442,9 +1446,13 @@ frdest_t *fdp;
* If there is another M_PROTO, we don't want it
*/
if (*mpp != mb) {
+ mp = *mpp;
+ (void) unlinkb(mp);
+ mp = (*mpp)->b_cont;
(*mpp)->b_cont = NULL;
(*mpp)->b_prev = NULL;
freemsg(*mpp);
+ *mpp = mp;
}
ir = (ire_t *)fdp->fd_ifp;
@@ -1537,6 +1545,7 @@ frdest_t *fdp;
mb = mp2;
}
}
+ *mpp = mb;
if (ir->ire_stq)
q = ir->ire_stq;
@@ -1544,6 +1553,7 @@ frdest_t *fdp;
q = WR(ir->ire_rfq);
if (q) {
mb->b_prev = NULL;
+ mb->b_queue = q;
RWLOCK_EXIT(&ipfs_mutex);
RWLOCK_EXIT(&ipf_solaris);
#if SOLARIS2 >= 6
OpenPOWER on IntegriCloud