|
|
1.1 ! root 1: /*- ! 2: * Copyright (c) 1991 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms, with or without ! 6: * modification, are permitted provided that the following conditions ! 7: * are met: ! 8: * 1. Redistributions of source code must retain the above copyright ! 9: * notice, this list of conditions and the following disclaimer. ! 10: * 2. Redistributions in binary form must reproduce the above copyright ! 11: * notice, this list of conditions and the following disclaimer in the ! 12: * documentation and/or other materials provided with the distribution. ! 13: * 3. All advertising materials mentioning features or use of this software ! 14: * must display the following acknowledgement: ! 15: * This product includes software developed by the University of ! 16: * California, Berkeley and its contributors. ! 17: * 4. Neither the name of the University nor the names of its contributors ! 18: * may be used to endorse or promote products derived from this software ! 19: * without specific prior written permission. ! 20: * ! 21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 31: * SUCH DAMAGE. ! 32: * ! 33: * @(#)clnp_timer.c 7.5 (Berkeley) 5/6/91 ! 34: */ ! 35: ! 36: /*********************************************************** ! 37: Copyright IBM Corporation 1987 ! 38: ! 39: All Rights Reserved ! 40: ! 41: Permission to use, copy, modify, and distribute this software and its ! 42: documentation for any purpose and without fee is hereby granted, ! 43: provided that the above copyright notice appear in all copies and that ! 44: both that copyright notice and this permission notice appear in ! 45: supporting documentation, and that the name of IBM not be ! 46: used in advertising or publicity pertaining to distribution of the ! 47: software without specific, written prior permission. ! 48: ! 49: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 50: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 51: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 52: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 53: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 54: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 55: SOFTWARE. ! 56: ! 57: ******************************************************************/ ! 58: ! 59: /* ! 60: * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison ! 61: */ ! 62: /* $Header: clnp_timer.c,v 4.2 88/06/29 14:59:05 hagens Exp $ */ ! 63: /* $Source: /usr/argo/sys/netiso/RCS/clnp_timer.c,v $ */ ! 64: ! 65: #include "param.h" ! 66: #include "mbuf.h" ! 67: #include "domain.h" ! 68: #include "protosw.h" ! 69: #include "socket.h" ! 70: #include "socketvar.h" ! 71: #include "errno.h" ! 72: ! 73: #include "../net/if.h" ! 74: #include "../net/route.h" ! 75: ! 76: #include "iso.h" ! 77: #include "clnp.h" ! 78: #include "clnp_stat.h" ! 79: #include "argo_debug.h" ! 80: ! 81: extern struct clnp_fragl *clnp_frags; ! 82: ! 83: /* ! 84: * FUNCTION: clnp_freefrags ! 85: * ! 86: * PURPOSE: Free the resources associated with a fragment ! 87: * ! 88: * RETURNS: pointer to next fragment in list of fragments ! 89: * ! 90: * SIDE EFFECTS: ! 91: * ! 92: * NOTES: ! 93: * TODO: send ER back to source ! 94: */ ! 95: struct clnp_fragl * ! 96: clnp_freefrags(cfh) ! 97: register struct clnp_fragl *cfh; /* fragment header to delete */ ! 98: { ! 99: struct clnp_fragl *next = cfh->cfl_next; ! 100: struct clnp_frag *cf; ! 101: ! 102: /* free any frags hanging around */ ! 103: cf = cfh->cfl_frags; ! 104: while (cf != NULL) { ! 105: struct clnp_frag *cf_next = cf->cfr_next; ! 106: INCSTAT(cns_fragdropped); ! 107: m_freem(cf->cfr_data); ! 108: cf = cf_next; ! 109: } ! 110: ! 111: /* free the copy of the header */ ! 112: INCSTAT(cns_fragdropped); ! 113: m_freem(cfh->cfl_orighdr); ! 114: ! 115: if (clnp_frags == cfh) { ! 116: clnp_frags = cfh->cfl_next; ! 117: } else { ! 118: struct clnp_fragl *scan; ! 119: ! 120: for (scan = clnp_frags; scan != NULL; scan = scan->cfl_next) { ! 121: if (scan->cfl_next == cfh) { ! 122: scan->cfl_next = cfh->cfl_next; ! 123: break; ! 124: } ! 125: } ! 126: } ! 127: ! 128: /* free the fragment header */ ! 129: m_freem(dtom(cfh)); ! 130: ! 131: return(next); ! 132: } ! 133: ! 134: /* ! 135: * FUNCTION: clnp_slowtimo ! 136: * ! 137: * PURPOSE: clnp timer processing; if the ttl expires on a ! 138: * packet on the reassembly queue, discard it. ! 139: * ! 140: * RETURNS: none ! 141: * ! 142: * SIDE EFFECTS: ! 143: * ! 144: * NOTES: ! 145: */ ! 146: clnp_slowtimo() ! 147: { ! 148: register struct clnp_fragl *cfh = clnp_frags; ! 149: int s = splnet(); ! 150: ! 151: while (cfh != NULL) { ! 152: if (--cfh->cfl_ttl == 0) { ! 153: cfh = clnp_freefrags(cfh); ! 154: INCSTAT(cns_fragtimeout); ! 155: } else { ! 156: cfh = cfh->cfl_next; ! 157: } ! 158: } ! 159: splx(s); ! 160: } ! 161: ! 162: /* ! 163: * FUNCTION: clnp_drain ! 164: * ! 165: * PURPOSE: drain off all datagram fragments ! 166: * ! 167: * RETURNS: none ! 168: * ! 169: * SIDE EFFECTS: ! 170: * ! 171: * NOTES: ! 172: * TODO: should send back ER ! 173: */ ! 174: clnp_drain() ! 175: { ! 176: register struct clnp_fragl *cfh = clnp_frags; ! 177: ! 178: while (cfh != NULL) ! 179: cfh = clnp_freefrags(cfh); ! 180: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.