|
|
1.1 ! root 1: /*********************************************************** ! 2: Copyright IBM Corporation 1987 ! 3: ! 4: All Rights Reserved ! 5: ! 6: Permission to use, copy, modify, and distribute this software and its ! 7: documentation for any purpose and without fee is hereby granted, ! 8: provided that the above copyright notice appear in all copies and that ! 9: both that copyright notice and this permission notice appear in ! 10: supporting documentation, and that the name of IBM not be ! 11: used in advertising or publicity pertaining to distribution of the ! 12: software without specific, written prior permission. ! 13: ! 14: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 15: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 16: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 17: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 18: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 19: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 20: SOFTWARE. ! 21: ! 22: ******************************************************************/ ! 23: ! 24: /* ! 25: * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison ! 26: */ ! 27: /* $Header: clnp_timer.c,v 4.2 88/06/29 14:59:05 hagens Exp $ */ ! 28: /* $Source: /usr/argo/sys/netiso/RCS/clnp_timer.c,v $ */ ! 29: /* @(#)clnp_timer.c 7.4 (Berkeley) 9/22/89 */ ! 30: ! 31: #ifndef lint ! 32: static char *rcsid = "$Header: clnp_timer.c,v 4.2 88/06/29 14:59:05 hagens Exp $"; ! 33: #endif lint ! 34: ! 35: #include "param.h" ! 36: #include "mbuf.h" ! 37: #include "domain.h" ! 38: #include "protosw.h" ! 39: #include "socket.h" ! 40: #include "socketvar.h" ! 41: #include "errno.h" ! 42: ! 43: #include "../net/if.h" ! 44: #include "../net/route.h" ! 45: ! 46: #include "iso.h" ! 47: #include "clnp.h" ! 48: #include "clnp_stat.h" ! 49: #include "argo_debug.h" ! 50: ! 51: extern struct clnp_fragl *clnp_frags; ! 52: ! 53: /* ! 54: * FUNCTION: clnp_freefrags ! 55: * ! 56: * PURPOSE: Free the resources associated with a fragment ! 57: * ! 58: * RETURNS: pointer to next fragment in list of fragments ! 59: * ! 60: * SIDE EFFECTS: ! 61: * ! 62: * NOTES: ! 63: * TODO: send ER back to source ! 64: */ ! 65: struct clnp_fragl * ! 66: clnp_freefrags(cfh) ! 67: register struct clnp_fragl *cfh; /* fragment header to delete */ ! 68: { ! 69: struct clnp_fragl *next = cfh->cfl_next; ! 70: struct clnp_frag *cf; ! 71: ! 72: /* free any frags hanging around */ ! 73: cf = cfh->cfl_frags; ! 74: while (cf != NULL) { ! 75: struct clnp_frag *cf_next = cf->cfr_next; ! 76: INCSTAT(cns_fragdropped); ! 77: m_freem(cf->cfr_data); ! 78: cf = cf_next; ! 79: } ! 80: ! 81: /* free the copy of the header */ ! 82: INCSTAT(cns_fragdropped); ! 83: m_freem(cfh->cfl_orighdr); ! 84: ! 85: if (clnp_frags == cfh) { ! 86: clnp_frags = cfh->cfl_next; ! 87: } else { ! 88: struct clnp_fragl *scan; ! 89: ! 90: for (scan = clnp_frags; scan != NULL; scan = scan->cfl_next) { ! 91: if (scan->cfl_next == cfh) { ! 92: scan->cfl_next = cfh->cfl_next; ! 93: break; ! 94: } ! 95: } ! 96: } ! 97: ! 98: /* free the fragment header */ ! 99: m_freem(dtom(cfh)); ! 100: ! 101: return(next); ! 102: } ! 103: ! 104: /* ! 105: * FUNCTION: clnp_slowtimo ! 106: * ! 107: * PURPOSE: clnp timer processing; if the ttl expires on a ! 108: * packet on the reassembly queue, discard it. ! 109: * ! 110: * RETURNS: none ! 111: * ! 112: * SIDE EFFECTS: ! 113: * ! 114: * NOTES: ! 115: */ ! 116: clnp_slowtimo() ! 117: { ! 118: register struct clnp_fragl *cfh = clnp_frags; ! 119: int s = splnet(); ! 120: ! 121: while (cfh != NULL) { ! 122: if (--cfh->cfl_ttl == 0) { ! 123: cfh = clnp_freefrags(cfh); ! 124: INCSTAT(cns_fragtimeout); ! 125: } else { ! 126: cfh = cfh->cfl_next; ! 127: } ! 128: } ! 129: splx(s); ! 130: } ! 131: ! 132: /* ! 133: * FUNCTION: clnp_drain ! 134: * ! 135: * PURPOSE: drain off all datagram fragments ! 136: * ! 137: * RETURNS: none ! 138: * ! 139: * SIDE EFFECTS: ! 140: * ! 141: * NOTES: ! 142: * TODO: should send back ER ! 143: */ ! 144: clnp_drain() ! 145: { ! 146: register struct clnp_fragl *cfh = clnp_frags; ! 147: ! 148: while (cfh != NULL) ! 149: cfh = clnp_freefrags(cfh); ! 150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.