Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
net
ipv4
tcp_diag.c
Go to the documentation of this file.
1
/*
2
* tcp_diag.c Module for monitoring TCP transport protocols sockets.
3
*
4
* Authors: Alexey Kuznetsov, <
[email protected]
>
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version
9
* 2 of the License, or (at your option) any later version.
10
*/
11
12
13
#include <linux/module.h>
14
#include <linux/inet_diag.h>
15
16
#include <linux/tcp.h>
17
18
#include <
net/tcp.h
>
19
20
static
void
tcp_diag_get_info(
struct
sock
*
sk
,
struct
inet_diag_msg
*
r
,
21
void
*_info)
22
{
23
const
struct
tcp_sock
*tp = tcp_sk(sk);
24
struct
tcp_info
*
info
= _info;
25
26
if
(sk->sk_state ==
TCP_LISTEN
) {
27
r->
idiag_rqueue
= sk->
sk_ack_backlog
;
28
r->
idiag_wqueue
= sk->
sk_max_ack_backlog
;
29
}
else
{
30
r->
idiag_rqueue
=
max_t
(
int
, tp->
rcv_nxt
- tp->
copied_seq
, 0);
31
r->
idiag_wqueue
= tp->
write_seq
- tp->
snd_una
;
32
}
33
if
(info !=
NULL
)
34
tcp_get_info
(sk, info);
35
}
36
37
static
void
tcp_diag_dump(
struct
sk_buff
*
skb
,
struct
netlink_callback
*
cb
,
38
struct
inet_diag_req_v2
*r,
struct
nlattr
*
bc
)
39
{
40
inet_diag_dump_icsk
(&
tcp_hashinfo
, skb, cb, r, bc);
41
}
42
43
static
int
tcp_diag_dump_one(
struct
sk_buff
*in_skb,
const
struct
nlmsghdr
*nlh,
44
struct
inet_diag_req_v2
*
req
)
45
{
46
return
inet_diag_dump_one_icsk
(&
tcp_hashinfo
, in_skb, nlh, req);
47
}
48
49
static
const
struct
inet_diag_handler
tcp_diag_handler = {
50
.dump = tcp_diag_dump,
51
.dump_one = tcp_diag_dump_one,
52
.idiag_get_info = tcp_diag_get_info,
53
.idiag_type =
IPPROTO_TCP
,
54
};
55
56
static
int
__init
tcp_diag_init(
void
)
57
{
58
return
inet_diag_register
(&tcp_diag_handler);
59
}
60
61
static
void
__exit
tcp_diag_exit(
void
)
62
{
63
inet_diag_unregister
(&tcp_diag_handler);
64
}
65
66
module_init
(tcp_diag_init);
67
module_exit
(tcp_diag_exit);
68
MODULE_LICENSE
(
"GPL"
);
69
MODULE_ALIAS_NET_PF_PROTO_TYPE
(
PF_NETLINK
,
NETLINK_SOCK_DIAG
, 2-6
/* AF_INET - IPPROTO_TCP */
);
Generated on Thu Jan 10 2013 14:58:50 for Linux Kernel by
1.8.2