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