OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [net/] [sctp/] [objcnt.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* SCTP kernel reference Implementation
2
 * Copyright (c) 2001 International Business Machines Corp.
3
 *
4
 * This file is part of the SCTP kernel reference Implementation
5
 *
6
 * Support for memory object debugging.  This allows one to monitor the
7
 * object allocations/deallocations for types instrumented for this
8
 * via the proc fs.
9
 *
10
 * The SCTP reference implementation is free software;
11
 * you can redistribute it and/or modify it under the terms of
12
 * the GNU General Public License as published by
13
 * the Free Software Foundation; either version 2, or (at your option)
14
 * any later version.
15
 *
16
 * The SCTP reference implementation is distributed in the hope that it
17
 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
18
 *                 ************************
19
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20
 * See the GNU General Public License for more details.
21
 *
22
 * You should have received a copy of the GNU General Public License
23
 * along with GNU CC; see the file COPYING.  If not, write to
24
 * the Free Software Foundation, 59 Temple Place - Suite 330,
25
 * Boston, MA 02111-1307, USA.
26
 *
27
 * Please send any bug reports or fixes you make to the
28
 * email address(es):
29
 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
30
 *
31
 * Or submit a bug report through the following website:
32
 *    http://www.sf.net/projects/lksctp
33
 *
34
 * Written or modified by:
35
 *    Jon Grimm             <jgrimm@us.ibm.com>
36
 *
37
 * Any bugs reported given to us we will try to fix... any fixes shared will
38
 * be incorporated into the next SCTP release.
39
 */
40
 
41
#include <linux/kernel.h>
42
#include <net/sctp/sctp.h>
43
 
44
/*
45
 * Global counters to count raw object allocation counts.
46
 * To add new counters, choose a unique suffix for the variable
47
 * name as the helper macros key off this suffix to make
48
 * life easier for the programmer.
49
 */
50
 
51
SCTP_DBG_OBJCNT(sock);
52
SCTP_DBG_OBJCNT(ep);
53
SCTP_DBG_OBJCNT(transport);
54
SCTP_DBG_OBJCNT(assoc);
55
SCTP_DBG_OBJCNT(bind_addr);
56
SCTP_DBG_OBJCNT(chunk);
57
SCTP_DBG_OBJCNT(addr);
58
SCTP_DBG_OBJCNT(ssnmap);
59
SCTP_DBG_OBJCNT(datamsg);
60
 
61
/* An array to make it easy to pretty print the debug information
62
 * to the proc fs.
63
 */
64
sctp_dbg_objcnt_entry_t sctp_dbg_objcnt[] = {
65
        SCTP_DBG_OBJCNT_ENTRY(sock),
66
        SCTP_DBG_OBJCNT_ENTRY(ep),
67
        SCTP_DBG_OBJCNT_ENTRY(assoc),
68
        SCTP_DBG_OBJCNT_ENTRY(transport),
69
        SCTP_DBG_OBJCNT_ENTRY(chunk),
70
        SCTP_DBG_OBJCNT_ENTRY(bind_addr),
71
        SCTP_DBG_OBJCNT_ENTRY(addr),
72
        SCTP_DBG_OBJCNT_ENTRY(ssnmap),
73
        SCTP_DBG_OBJCNT_ENTRY(datamsg),
74
};
75
 
76
/* Callback from procfs to read out objcount information.
77
 * Walk through the entries in the sctp_dbg_objcnt array, dumping
78
 * the raw object counts for each monitored type.
79
 *
80
 * This code was modified from similar code in route.c
81
 */
82
static int sctp_dbg_objcnt_read(char *buffer, char **start, off_t offset,
83
                                int length, int *eof, void *data)
84
{
85
        int len = 0;
86
        off_t pos = 0;
87
        int entries;
88
        int i;
89
        char temp[128];
90
 
91
        /* How many entries? */
92
        entries = ARRAY_SIZE(sctp_dbg_objcnt);
93
 
94
        /* Walk the entries and print out the debug information
95
         * for proc fs.
96
         */
97
        for (i = 0; i < entries; i++) {
98
                pos += 128;
99
 
100
                /* Skip ahead. */
101
                if (pos <= offset) {
102
                        len = 0;
103
                        continue;
104
                }
105
                /* Print out each entry. */
106
                sprintf(temp, "%s: %d",
107
                        sctp_dbg_objcnt[i].label,
108
                        atomic_read(sctp_dbg_objcnt[i].counter));
109
 
110
                sprintf(buffer + len, "%-127s\n", temp);
111
                len += 128;
112
                if (pos >= offset+length)
113
                        goto done;
114
        }
115
 
116
done:
117
        *start = buffer + len - (pos - offset);
118
        len = pos - offset;
119
        if (len > length)
120
                len = length;
121
 
122
        return len;
123
}
124
 
125
/* Initialize the objcount in the proc filesystem.  */
126
void sctp_dbg_objcnt_init(void)
127
{
128
        create_proc_read_entry("sctp_dbg_objcnt", 0, proc_net_sctp,
129
                               sctp_dbg_objcnt_read, NULL);
130
}
131
 
132
/* Cleanup the objcount entry in the proc filesystem.  */
133
void sctp_dbg_objcnt_exit(void)
134
{
135
        remove_proc_entry("sctp_dbg_objcount", proc_net_sctp);
136
}
137
 
138
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.