diff options
author | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-08-12 11:59:17 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-08-29 18:57:54 -0400 |
commit | 17b085eacef81a6286bd478f2ec75e04abb091cb (patch) | |
tree | b990ca4a3b8e2c08fbcf09ba18e9ae469754b2df /net/ipv4/inet_diag.c | |
parent | a8c2190ee7da1a1dc68ff1a6b5f03feb61e523a5 (diff) |
[INET_DIAG]: Move the tcp_diag interface to the proper place
With this the previous setup is back, i.e. tcp_diag can be built as a module,
as dccp_diag and both share the infrastructure available in inet_diag.
If one selects CONFIG_INET_DIAG as module CONFIG_INET_TCP_DIAG will also be
built as a module, as will CONFIG_INET_DCCP_DIAG, if CONFIG_IP_DCCP was
selected static or as a module, if CONFIG_INET_DIAG is y, being statically
linked CONFIG_INET_TCP_DIAG will follow suit and CONFIG_INET_DCCP_DIAG will be
built in the same manner as CONFIG_IP_DCCP.
Now to aim at UDP, converting it to use inet_hashinfo, so that we can use
iproute2 for UDP sockets as well.
Ah, just to show an example of this new infrastructure working for DCCP :-)
[root@qemu ~]# ./ss -dane
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:5001 *:* ino:942 sk:cfd503a0
ESTAB 0 0 127.0.0.1:5001 127.0.0.1:32770 ino:943 sk:cfd50a60
ESTAB 0 0 127.0.0.1:32770 127.0.0.1:5001 ino:947 sk:cfd50700
TIME-WAIT 0 0 127.0.0.1:32769 127.0.0.1:5001 timer:(timewait,3.430ms,0) ino:0 sk:cf209620
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/inet_diag.c')
-rw-r--r-- | net/ipv4/inet_diag.c | 27 |
1 files changed, 1 insertions, 26 deletions
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 3bd510941da0..1880ad8575d8 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
@@ -797,25 +797,6 @@ static void inet_diag_rcv(struct sock *sk, int len) | |||
797 | } | 797 | } |
798 | } | 798 | } |
799 | 799 | ||
800 | static void tcp_diag_get_info(struct sock *sk, struct inet_diag_msg *r, | ||
801 | void *_info) | ||
802 | { | ||
803 | const struct tcp_sock *tp = tcp_sk(sk); | ||
804 | struct tcp_info *info = _info; | ||
805 | |||
806 | r->idiag_rqueue = tp->rcv_nxt - tp->copied_seq; | ||
807 | r->idiag_wqueue = tp->write_seq - tp->snd_una; | ||
808 | if (info != NULL) | ||
809 | tcp_get_info(sk, info); | ||
810 | } | ||
811 | |||
812 | static struct inet_diag_handler tcp_diag_handler = { | ||
813 | .idiag_hashinfo = &tcp_hashinfo, | ||
814 | .idiag_get_info = tcp_diag_get_info, | ||
815 | .idiag_type = TCPDIAG_GETSOCK, | ||
816 | .idiag_info_size = sizeof(struct tcp_info), | ||
817 | }; | ||
818 | |||
819 | static DEFINE_SPINLOCK(inet_diag_register_lock); | 800 | static DEFINE_SPINLOCK(inet_diag_register_lock); |
820 | 801 | ||
821 | int inet_diag_register(const struct inet_diag_handler *h) | 802 | int inet_diag_register(const struct inet_diag_handler *h) |
@@ -864,19 +845,13 @@ static int __init inet_diag_init(void) | |||
864 | goto out; | 845 | goto out; |
865 | 846 | ||
866 | memset(inet_diag_table, 0, inet_diag_table_size); | 847 | memset(inet_diag_table, 0, inet_diag_table_size); |
867 | |||
868 | idiagnl = netlink_kernel_create(NETLINK_INET_DIAG, inet_diag_rcv, | 848 | idiagnl = netlink_kernel_create(NETLINK_INET_DIAG, inet_diag_rcv, |
869 | THIS_MODULE); | 849 | THIS_MODULE); |
870 | if (idiagnl == NULL) | 850 | if (idiagnl == NULL) |
871 | goto out_free_table; | 851 | goto out_free_table; |
872 | 852 | err = 0; | |
873 | err = inet_diag_register(&tcp_diag_handler); | ||
874 | if (err) | ||
875 | goto out_sock_release; | ||
876 | out: | 853 | out: |
877 | return err; | 854 | return err; |
878 | out_sock_release: | ||
879 | sock_release(idiagnl->sk_socket); | ||
880 | out_free_table: | 855 | out_free_table: |
881 | kfree(inet_diag_table); | 856 | kfree(inet_diag_table); |
882 | goto out; | 857 | goto out; |