|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * Copyright (c) University of British Columbia, 1984 ! 24: * Copyright (c) 1990, 1993 ! 25: * The Regents of the University of California. All rights reserved. ! 26: * ! 27: * This code is derived from software contributed to Berkeley by ! 28: * the Laboratory for Computation Vision and the Computer Science Department ! 29: * of the University of British Columbia. ! 30: * ! 31: * Redistribution and use in source and binary forms, with or without ! 32: * modification, are permitted provided that the following conditions ! 33: * are met: ! 34: * 1. Redistributions of source code must retain the above copyright ! 35: * notice, this list of conditions and the following disclaimer. ! 36: * 2. Redistributions in binary form must reproduce the above copyright ! 37: * notice, this list of conditions and the following disclaimer in the ! 38: * documentation and/or other materials provided with the distribution. ! 39: * 3. All advertising materials mentioning features or use of this software ! 40: * must display the following acknowledgement: ! 41: * This product includes software developed by the University of ! 42: * California, Berkeley and its contributors. ! 43: * 4. Neither the name of the University nor the names of its contributors ! 44: * may be used to endorse or promote products derived from this software ! 45: * without specific prior written permission. ! 46: * ! 47: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 48: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 49: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 50: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 51: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 52: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 53: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 54: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 55: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 56: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 57: * SUCH DAMAGE. ! 58: * ! 59: * @(#)pk_debug.c 8.1 (Berkeley) 6/10/93 ! 60: */ ! 61: ! 62: #include <sys/param.h> ! 63: #include <sys/systm.h> ! 64: #include <sys/mbuf.h> ! 65: #include <sys/socket.h> ! 66: #include <sys/protosw.h> ! 67: #include <sys/socketvar.h> ! 68: #include <sys/errno.h> ! 69: #include <sys/malloc.h> ! 70: ! 71: #include <net/if.h> ! 72: ! 73: #include <netccitt/x25.h> ! 74: #include <netccitt/pk.h> ! 75: #include <netccitt/pk_var.h> ! 76: ! 77: char *pk_state[] = { ! 78: "Listen", "Ready", "Received-Call", ! 79: "Sent-Call", "Data-Transfer","Received-Clear", ! 80: "Sent-Clear", ! 81: }; ! 82: ! 83: char *pk_name[] = { ! 84: "Call", "Call-Conf", "Clear", ! 85: "Clear-Conf", "Data", "Intr", "Intr-Conf", ! 86: "Rr", "Rnr", "Reset", "Reset-Conf", ! 87: "Restart", "Restart-Conf", "Reject", "Diagnostic", ! 88: "Invalid" ! 89: }; ! 90: ! 91: pk_trace (xcp, m, dir) ! 92: struct x25config *xcp; ! 93: register struct mbuf *m; ! 94: char *dir; ! 95: { ! 96: register char *s; ! 97: struct x25_packet *xp = mtod(m, struct x25_packet *); ! 98: register int i, len = 0, cnt = 0; ! 99: ! 100: if (xcp -> xc_ptrace == 0) ! 101: return; ! 102: ! 103: i = pk_decode (xp) / MAXSTATES; ! 104: for (; m; m = m -> m_next) { ! 105: len = len + m -> m_len; ! 106: ++cnt; ! 107: } ! 108: printf ("LCN=%d %s: %s #=%d, len=%d ", ! 109: LCN(xp), dir, pk_name[i], cnt, len); ! 110: for (s = (char *) xp, i = 0; i < 5; ++i, ++s) ! 111: printf ("%x ", (int) * s & 0xff); ! 112: printf ("\n"); ! 113: } ! 114: ! 115: mbuf_cache(c, m) ! 116: register struct mbuf_cache *c; ! 117: struct mbuf *m; ! 118: { ! 119: register struct mbuf **mp; ! 120: ! 121: if (c->mbc_size != c->mbc_oldsize) { ! 122: unsigned zero_size, copy_size; ! 123: unsigned new_size = c->mbc_size * sizeof(m); ! 124: caddr_t cache = (caddr_t)c->mbc_cache; ! 125: ! 126: if (new_size) { ! 127: // c->mbc_cache = (struct mbuf **) ! 128: // malloc(new_size, M_MBUF, M_NOWAIT); ! 129: MALLOC(c->mbc_cache, struct mbuf **, new_size, M_MBUF, M_NOWAIT); ! 130: if (c->mbc_cache == 0) { ! 131: c->mbc_cache = (struct mbuf **)cache; ! 132: return; ! 133: } ! 134: c->mbc_num %= c->mbc_size; ! 135: } else ! 136: c->mbc_cache = 0; ! 137: if (c->mbc_size < c->mbc_oldsize) { ! 138: register struct mbuf **mplim; ! 139: mp = c->mbc_size + (struct mbuf **)cache; ! 140: mplim = c->mbc_oldsize + (struct mbuf **)cache; ! 141: while (mp < mplim) ! 142: m_freem(*mp++); ! 143: zero_size = 0; ! 144: } else ! 145: zero_size = (c->mbc_size - c->mbc_oldsize) * sizeof(m); ! 146: copy_size = new_size - zero_size; ! 147: c->mbc_oldsize = c->mbc_size; ! 148: if (copy_size) ! 149: bcopy(cache, (caddr_t)c->mbc_cache, copy_size); ! 150: if (cache) ! 151: FREE(cache, M_MBUF); ! 152: if (zero_size) ! 153: bzero(copy_size + (caddr_t)c->mbc_cache, zero_size); ! 154: } ! 155: if (c->mbc_size == 0) ! 156: return; ! 157: mp = c->mbc_cache + c->mbc_num; ! 158: c->mbc_num = (1 + c->mbc_num) % c->mbc_size; ! 159: if (*mp) ! 160: m_freem(*mp); ! 161: if (*mp = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) ! 162: (*mp)->m_flags |= m->m_flags & 0x08; ! 163: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.