|
|
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.