Blame view
net/dccp/diag.c
2.12 KB
d2912cb15
|
1 |
// SPDX-License-Identifier: GPL-2.0-only |
4f5736c4c
|
2 3 4 5 6 |
/* * net/dccp/diag.c * * An implementation of the DCCP protocol * Arnaldo Carvalho de Melo <acme@mandriva.com> |
4f5736c4c
|
7 |
*/ |
4f5736c4c
|
8 9 |
#include <linux/module.h> |
a8c2190ee
|
10 |
#include <linux/inet_diag.h> |
4f5736c4c
|
11 |
|
2babe1f6f
|
12 |
#include "ccid.h" |
4f5736c4c
|
13 |
#include "dccp.h" |
2babe1f6f
|
14 15 16 17 18 19 20 21 22 23 24 |
static void dccp_get_info(struct sock *sk, struct tcp_info *info) { struct dccp_sock *dp = dccp_sk(sk); const struct inet_connection_sock *icsk = inet_csk(sk); memset(info, 0, sizeof(*info)); info->tcpi_state = sk->sk_state; info->tcpi_retransmits = icsk->icsk_retransmits; info->tcpi_probes = icsk->icsk_probes_out; info->tcpi_backoff = icsk->icsk_backoff; |
d83d8461f
|
25 |
info->tcpi_pmtu = icsk->icsk_pmtu_cookie; |
2babe1f6f
|
26 |
|
6fdd34d43
|
27 |
if (dp->dccps_hc_rx_ackvec != NULL) |
2babe1f6f
|
28 |
info->tcpi_options |= TCPI_OPT_SACK; |
a693722ae
|
29 30 31 32 33 |
if (dp->dccps_hc_rx_ccid != NULL) ccid_hc_rx_get_info(dp->dccps_hc_rx_ccid, sk, info); if (dp->dccps_hc_tx_ccid != NULL) ccid_hc_tx_get_info(dp->dccps_hc_tx_ccid, sk, info); |
2babe1f6f
|
34 |
} |
73c1f4a03
|
35 |
static void dccp_diag_get_info(struct sock *sk, struct inet_diag_msg *r, |
4f5736c4c
|
36 37 |
void *_info) { |
73c1f4a03
|
38 |
r->idiag_rqueue = r->idiag_wqueue = 0; |
2babe1f6f
|
39 40 41 |
if (_info != NULL) dccp_get_info(sk, _info); |
4f5736c4c
|
42 |
} |
1942c518c
|
43 |
static void dccp_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, |
0df6d3284
|
44 |
const struct inet_diag_req_v2 *r) |
1942c518c
|
45 |
{ |
0df6d3284
|
46 |
inet_diag_dump_icsk(&dccp_hashinfo, skb, cb, r); |
1942c518c
|
47 |
} |
5682d393b
|
48 |
static int dccp_diag_dump_one(struct netlink_callback *cb, |
34160ea3f
|
49 |
const struct inet_diag_req_v2 *req) |
1942c518c
|
50 |
{ |
5682d393b
|
51 |
return inet_diag_dump_one_icsk(&dccp_hashinfo, cb, req); |
1942c518c
|
52 |
} |
a7a0d6a87
|
53 |
static const struct inet_diag_handler dccp_diag_handler = { |
1942c518c
|
54 55 |
.dump = dccp_diag_dump, .dump_one = dccp_diag_dump_one, |
4f5736c4c
|
56 |
.idiag_get_info = dccp_diag_get_info, |
f13c95f0e
|
57 |
.idiag_type = IPPROTO_DCCP, |
3fd22af80
|
58 |
.idiag_info_size = sizeof(struct tcp_info), |
4f5736c4c
|
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
}; static int __init dccp_diag_init(void) { return inet_diag_register(&dccp_diag_handler); } static void __exit dccp_diag_fini(void) { inet_diag_unregister(&dccp_diag_handler); } module_init(dccp_diag_init); module_exit(dccp_diag_fini); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>"); MODULE_DESCRIPTION("DCCP inet_diag handler"); |
aec8dc62f
|
77 |
MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_NETLINK, NETLINK_SOCK_DIAG, 2-33 /* AF_INET - IPPROTO_DCCP */); |