This source file includes following definitions.
- get__netinfo
- tcp_get_info
- udp_get_info
- raw_get_info
- afinet_get_info
- snmp_get_info
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include <asm/system.h>
32 #include <linux/autoconf.h>
33 #include <linux/sched.h>
34 #include <linux/socket.h>
35 #include <linux/net.h>
36 #include <linux/un.h>
37 #include <linux/in.h>
38 #include <linux/param.h>
39 #include <linux/inet.h>
40 #include <linux/netdevice.h>
41 #include <net/ip.h>
42 #include <net/icmp.h>
43 #include <net/protocol.h>
44 #include <net/tcp.h>
45 #include <net/udp.h>
46 #include <linux/skbuff.h>
47 #include <net/sock.h>
48 #include <net/raw.h>
49
50
51
52
53
54
55
56
57 static int
58 get__netinfo(struct proto *pro, char *buffer, int format, char **start, off_t offset, int length)
59 {
60 struct sock **s_array;
61 struct sock *sp;
62 int i;
63 int timer_active;
64 int timer_active1;
65 int timer_active2;
66 unsigned long timer_expires;
67 unsigned long dest, src;
68 unsigned short destp, srcp;
69 int len=0;
70 off_t pos=0;
71 off_t begin=0;
72
73 s_array = pro->sock_array;
74 len+=sprintf(buffer, "sl local_address rem_address st tx_queue rx_queue tr tm->when uid\n");
75
76
77
78
79
80 for(i = 0; i < SOCK_ARRAY_SIZE; i++)
81 {
82 cli();
83 sp = s_array[i];
84 while(sp != NULL)
85 {
86 dest = sp->daddr;
87 src = sp->saddr;
88 destp = sp->dummy_th.dest;
89 srcp = sp->dummy_th.source;
90
91
92 destp = ntohs(destp);
93 srcp = ntohs(srcp);
94 timer_active1 = del_timer(&sp->retransmit_timer);
95 timer_active2 = del_timer(&sp->timer);
96 if (!timer_active1) sp->retransmit_timer.expires=0;
97 if (!timer_active2) sp->timer.expires=0;
98 timer_active=0;
99 timer_expires=(unsigned)-1;
100 if (timer_active1 &&
101 sp->retransmit_timer.expires < timer_expires) {
102 timer_active=timer_active1;
103 timer_expires=sp->retransmit_timer.expires;
104 }
105 if (timer_active2 &&
106 sp->timer.expires < timer_expires) {
107 timer_active=timer_active2;
108 timer_expires=sp->timer.expires;
109 }
110 len+=sprintf(buffer+len, "%2d: %08lX:%04X %08lX:%04X %02X %08lX:%08lX %02X:%08lX %08X %d %d\n",
111 i, src, srcp, dest, destp, sp->state,
112 format==0?sp->write_seq-sp->rcv_ack_seq:sp->rmem_alloc,
113 format==0?sp->acked_seq-sp->copied_seq:sp->wmem_alloc,
114 timer_active, timer_expires, (unsigned) sp->retransmits,
115 sp->socket?SOCK_INODE(sp->socket)->i_uid:0,
116 timer_active?sp->timeout:0);
117 if (timer_active1) add_timer(&sp->retransmit_timer);
118 if (timer_active2) add_timer(&sp->timer);
119
120
121
122
123
124 sp = sp->next;
125 pos=begin+len;
126 if(pos<offset)
127 {
128 len=0;
129 begin=pos;
130 }
131 if(pos>offset+length)
132 break;
133 }
134 sti();
135
136 if(pos>offset+length)
137 break;
138 }
139 *start=buffer+(offset-begin);
140 len-=(offset-begin);
141 if(len>length)
142 len=length;
143 return len;
144 }
145
146
147 int tcp_get_info(char *buffer, char **start, off_t offset, int length)
148 {
149 return get__netinfo(&tcp_prot, buffer,0, start, offset, length);
150 }
151
152
153 int udp_get_info(char *buffer, char **start, off_t offset, int length)
154 {
155 return get__netinfo(&udp_prot, buffer,1, start, offset, length);
156 }
157
158
159 int raw_get_info(char *buffer, char **start, off_t offset, int length)
160 {
161 return get__netinfo(&raw_prot, buffer,1, start, offset, length);
162 }
163
164
165
166
167
168 int afinet_get_info(char *buffer, char **start, off_t offset, int length)
169 {
170
171 extern int socket_get_info(char *, char **, off_t, int);
172 extern struct proto packet_prot;
173
174 int len = socket_get_info(buffer,start,offset,length);
175
176 len += sprintf(buffer+len,"SOCK_ARRAY_SIZE=%d\n",SOCK_ARRAY_SIZE);
177 len += sprintf(buffer+len,"TCP: inuse %d highest %d\n",
178 tcp_prot.inuse, tcp_prot.highestinuse);
179 len += sprintf(buffer+len,"UDP: inuse %d highest %d\n",
180 udp_prot.inuse, udp_prot.highestinuse);
181 len += sprintf(buffer+len,"RAW: inuse %d highest %d\n",
182 raw_prot.inuse, raw_prot.highestinuse);
183 len += sprintf(buffer+len,"PAC: inuse %d highest %d\n",
184 packet_prot.inuse, packet_prot.highestinuse);
185 *start = buffer + offset;
186 len -= offset;
187 if (len > length)
188 len = length;
189 return len;
190 }
191
192
193
194
195
196
197 int snmp_get_info(char *buffer, char **start, off_t offset, int length)
198 {
199 extern struct tcp_mib tcp_statistics;
200 extern struct udp_mib udp_statistics;
201 int len;
202
203
204
205
206 len = sprintf (buffer,
207 "Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates\n"
208 "Ip: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
209 ip_statistics.IpForwarding, ip_statistics.IpDefaultTTL,
210 ip_statistics.IpInReceives, ip_statistics.IpInHdrErrors,
211 ip_statistics.IpInAddrErrors, ip_statistics.IpForwDatagrams,
212 ip_statistics.IpInUnknownProtos, ip_statistics.IpInDiscards,
213 ip_statistics.IpInDelivers, ip_statistics.IpOutRequests,
214 ip_statistics.IpOutDiscards, ip_statistics.IpOutNoRoutes,
215 ip_statistics.IpReasmTimeout, ip_statistics.IpReasmReqds,
216 ip_statistics.IpReasmOKs, ip_statistics.IpReasmFails,
217 ip_statistics.IpFragOKs, ip_statistics.IpFragFails,
218 ip_statistics.IpFragCreates);
219
220 len += sprintf (buffer + len,
221 "Icmp: InMsgs InErrors InDestUnreachs InTimeExcds InParmProbs InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps\n"
222 "Icmp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
223 icmp_statistics.IcmpInMsgs, icmp_statistics.IcmpInErrors,
224 icmp_statistics.IcmpInDestUnreachs, icmp_statistics.IcmpInTimeExcds,
225 icmp_statistics.IcmpInParmProbs, icmp_statistics.IcmpInSrcQuenchs,
226 icmp_statistics.IcmpInRedirects, icmp_statistics.IcmpInEchos,
227 icmp_statistics.IcmpInEchoReps, icmp_statistics.IcmpInTimestamps,
228 icmp_statistics.IcmpInTimestampReps, icmp_statistics.IcmpInAddrMasks,
229 icmp_statistics.IcmpInAddrMaskReps, icmp_statistics.IcmpOutMsgs,
230 icmp_statistics.IcmpOutErrors, icmp_statistics.IcmpOutDestUnreachs,
231 icmp_statistics.IcmpOutTimeExcds, icmp_statistics.IcmpOutParmProbs,
232 icmp_statistics.IcmpOutSrcQuenchs, icmp_statistics.IcmpOutRedirects,
233 icmp_statistics.IcmpOutEchos, icmp_statistics.IcmpOutEchoReps,
234 icmp_statistics.IcmpOutTimestamps, icmp_statistics.IcmpOutTimestampReps,
235 icmp_statistics.IcmpOutAddrMasks, icmp_statistics.IcmpOutAddrMaskReps);
236
237 len += sprintf (buffer + len,
238 "Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs\n"
239 "Tcp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
240 tcp_statistics.TcpRtoAlgorithm, tcp_statistics.TcpRtoMin,
241 tcp_statistics.TcpRtoMax, tcp_statistics.TcpMaxConn,
242 tcp_statistics.TcpActiveOpens, tcp_statistics.TcpPassiveOpens,
243 tcp_statistics.TcpAttemptFails, tcp_statistics.TcpEstabResets,
244 tcp_statistics.TcpCurrEstab, tcp_statistics.TcpInSegs,
245 tcp_statistics.TcpOutSegs, tcp_statistics.TcpRetransSegs);
246
247 len += sprintf (buffer + len,
248 "Udp: InDatagrams NoPorts InErrors OutDatagrams\nUdp: %lu %lu %lu %lu\n",
249 udp_statistics.UdpInDatagrams, udp_statistics.UdpNoPorts,
250 udp_statistics.UdpInErrors, udp_statistics.UdpOutDatagrams);
251
252
253
254
255
256
257 if (offset >= len)
258 {
259 *start = buffer;
260 return 0;
261 }
262 *start = buffer + offset;
263 len -= offset;
264 if (len > length)
265 len = length;
266 return len;
267 }
268