summaryrefslogtreecommitdiffstats
path: root/sys/netipsec
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2004-08-27 18:33:08 +0000
committerandre <andre@FreeBSD.org>2004-08-27 18:33:08 +0000
commit21264022388cc795478511d03b72ddc0ce213c5b (patch)
tree5e40bb2ff1fccfd1425f4b8ada947f22f8df6605 /sys/netipsec
parent4e16b35c5bbfa63f8794131592ae3b1ac4d05cfd (diff)
downloadFreeBSD-src-21264022388cc795478511d03b72ddc0ce213c5b.zip
FreeBSD-src-21264022388cc795478511d03b72ddc0ce213c5b.tar.gz
Apply error and success logic consistently to the function netisr_queue() and
its users. netisr_queue() now returns (0) on success and ERRNO on failure. At the moment ENXIO (netisr queue not functional) and ENOBUFS (netisr queue full) are supported. Previously it would return (1) on success but the return value of IF_HANDOFF() was interpreted wrongly and (0) was actually returned on success. Due to this schednetisr() was never called to kick the scheduling of the isr. However this was masked by other normal packets coming through netisr_dispatch() causing the dequeueing of waiting packets. PR: kern/70988 Found by: MOROHOSHI Akihiko <moro@remus.dti.ne.jp> MFC after: 3 days
Diffstat (limited to 'sys/netipsec')
-rw-r--r--sys/netipsec/ipsec_input.c4
-rw-r--r--sys/netipsec/xform_ipip.c2
2 files changed, 3 insertions, 3 deletions
diff --git a/sys/netipsec/ipsec_input.c b/sys/netipsec/ipsec_input.c
index 9eefa4d..7258446 100644
--- a/sys/netipsec/ipsec_input.c
+++ b/sys/netipsec/ipsec_input.c
@@ -447,13 +447,13 @@ ipsec4_common_input_cb(struct mbuf *m, struct secasvar *sav,
/*
* Re-dispatch via software interrupt.
*/
- if (!netisr_queue(NETISR_IP, m)) {
+ if ((error = netisr_queue(NETISR_IP, m))) {
IPSEC_ISTAT(sproto, espstat.esps_qfull, ahstat.ahs_qfull,
ipcompstat.ipcomps_qfull);
DPRINTF(("%s: queue full; proto %u packet dropped\n",
__func__, sproto));
- return ENOBUFS;
+ return error;
}
return 0;
bad:
diff --git a/sys/netipsec/xform_ipip.c b/sys/netipsec/xform_ipip.c
index 4ede1d2..b71d56b 100644
--- a/sys/netipsec/xform_ipip.c
+++ b/sys/netipsec/xform_ipip.c
@@ -376,7 +376,7 @@ _ipip_input(struct mbuf *m, int iphlen, struct ifnet *gifp)
panic("%s: bogus ip version %u", __func__, v>>4);
}
- if (!netisr_queue(isr, m)) {
+ if (netisr_queue(isr, m)) { /* (0) on success. */
ipipstat.ipips_qfull++;
DPRINTF(("%s: packet dropped because of full queue\n",
__func__));
OpenPOWER on IntegriCloud