summaryrefslogtreecommitdiff
path: root/sys/netinet/ip_ah_new.c
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1997-07-27 23:30:38 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1997-07-27 23:30:38 +0000
commitec6476191b05b8fefe66b6c9fc075b15ee809be6 (patch)
tree365e92dc2a1853ddda0cfc0d63b869895d9d03b7 /sys/netinet/ip_ah_new.c
parentbe30223d21a88e015111990b2ce8654b471005ba (diff)
expiration messages, fixes, updates, all sorts of things
Diffstat (limited to 'sys/netinet/ip_ah_new.c')
-rw-r--r--sys/netinet/ip_ah_new.c65
1 files changed, 63 insertions, 2 deletions
diff --git a/sys/netinet/ip_ah_new.c b/sys/netinet/ip_ah_new.c
index 58c647faa08..3ab1c619eaf 100644
--- a/sys/netinet/ip_ah_new.c
+++ b/sys/netinet/ip_ah_new.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_ah_new.c,v 1.5 1997/07/24 01:37:10 deraadt Exp $ */
+/* $OpenBSD: ip_ah_new.c,v 1.6 1997/07/27 23:30:34 niklas Exp $ */
/*
* The author of this code is John Ioannidis, ji@tla.org,
@@ -61,6 +61,8 @@
#include <netinet/ip_ah.h>
#include <sys/syslog.h>
+extern void encap_sendnotify(int, struct tdb *);
+
/*
* ah_new_attach() is called from the transformation initialization code.
* It just returns.
@@ -589,6 +591,35 @@ ah_new_input(struct mbuf *m, struct tdb *tdb)
tdb->tdb_cur_bytes += ntohs(ip->ip_len) - (ip->ip_hl << 2);
ahstat.ahs_ibytes += ntohs(ip->ip_len) - (ip->ip_hl << 2);
+ /* Notify on expiration */
+ if (tdb->tdb_flags & TDBF_SOFT_PACKETS)
+ if (tdb->tdb_cur_packets >= tdb->tdb_soft_packets)
+ {
+ encap_sendnotify(NOTIFY_SOFT_EXPIRE, tdb);
+ tdb->tdb_flags &= ~TDBF_SOFT_PACKETS;
+ }
+ else
+ if (tdb->tdb_flags & TDBF_SOFT_BYTES)
+ if (tdb->tdb_cur_bytes >= tdb->tdb_soft_bytes)
+ {
+ encap_sendnotify(NOTIFY_SOFT_EXPIRE, tdb);
+ tdb->tdb_flags &= ~TDBF_SOFT_BYTES;
+ }
+
+ if (tdb->tdb_flags & TDBF_PACKETS)
+ if (tdb->tdb_cur_packets >= tdb->tdb_exp_packets)
+ {
+ encap_sendnotify(NOTIFY_HARD_EXPIRE, tdb);
+ tdb_delete(tdb, 0);
+ }
+ else
+ if (tdb->tdb_flags & TDBF_BYTES)
+ if (tdb->tdb_cur_bytes >= tdb->tdb_exp_bytes)
+ {
+ encap_sendnotify(NOTIFY_HARD_EXPIRE, tdb);
+ tdb_delete(tdb, 0);
+ }
+
return m;
}
@@ -889,8 +920,38 @@ ah_new_output(struct mbuf *m, struct sockaddr_encap *gw, struct tdb *tdb,
/* Update the counters */
tdb->tdb_cur_packets++;
- tdb->tdb_cur_bytes += ntohs(ip->ip_len) - (ip->ip_hl << 2) - AH_NEW_FLENGTH;
+ tdb->tdb_cur_bytes += ntohs(ip->ip_len) - (ip->ip_hl << 2) -
+ AH_NEW_FLENGTH;
ahstat.ahs_obytes += ntohs(ip->ip_len) - (ip->ip_hl << 2) - AH_NEW_FLENGTH;
+ /* Notify on expiration */
+ if (tdb->tdb_flags & TDBF_SOFT_PACKETS)
+ if (tdb->tdb_cur_packets >= tdb->tdb_soft_packets)
+ {
+ encap_sendnotify(NOTIFY_SOFT_EXPIRE, tdb);
+ tdb->tdb_flags &= ~TDBF_SOFT_PACKETS;
+ }
+ else
+ if (tdb->tdb_flags & TDBF_SOFT_BYTES)
+ if (tdb->tdb_cur_bytes >= tdb->tdb_soft_bytes)
+ {
+ encap_sendnotify(NOTIFY_SOFT_EXPIRE, tdb);
+ tdb->tdb_flags &= ~TDBF_SOFT_BYTES;
+ }
+
+ if (tdb->tdb_flags & TDBF_PACKETS)
+ if (tdb->tdb_cur_packets >= tdb->tdb_exp_packets)
+ {
+ encap_sendnotify(NOTIFY_HARD_EXPIRE, tdb);
+ tdb_delete(tdb, 0);
+ }
+ else
+ if (tdb->tdb_flags & TDBF_BYTES)
+ if (tdb->tdb_cur_bytes >= tdb->tdb_exp_bytes)
+ {
+ encap_sendnotify(NOTIFY_HARD_EXPIRE, tdb);
+ tdb_delete(tdb, 0);
+ }
+
return 0;
}