]> Git Repo - linux.git/blob - net/rxrpc/misc.c
Merge branch 'mlx4-next'
[linux.git] / net / rxrpc / misc.c
1 /* Miscellaneous bits
2  *
3  * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells ([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 Licence
8  * as published by the Free Software Foundation; either version
9  * 2 of the Licence, or (at your option) any later version.
10  */
11
12 #include <linux/kernel.h>
13 #include <net/sock.h>
14 #include <net/af_rxrpc.h>
15 #include "ar-internal.h"
16
17 /*
18  * The maximum listening backlog queue size that may be set on a socket by
19  * listen().
20  */
21 unsigned int rxrpc_max_backlog __read_mostly = 10;
22
23 /*
24  * How long to wait before scheduling ACK generation after seeing a
25  * packet with RXRPC_REQUEST_ACK set (in jiffies).
26  */
27 unsigned int rxrpc_requested_ack_delay = 1;
28
29 /*
30  * How long to wait before scheduling an ACK with subtype DELAY (in jiffies).
31  *
32  * We use this when we've received new data packets.  If those packets aren't
33  * all consumed within this time we will send a DELAY ACK if an ACK was not
34  * requested to let the sender know it doesn't need to resend.
35  */
36 unsigned int rxrpc_soft_ack_delay = 1 * HZ;
37
38 /*
39  * How long to wait before scheduling an ACK with subtype IDLE (in jiffies).
40  *
41  * We use this when we've consumed some previously soft-ACK'd packets when
42  * further packets aren't immediately received to decide when to send an IDLE
43  * ACK let the other end know that it can free up its Tx buffer space.
44  */
45 unsigned int rxrpc_idle_ack_delay = 0.5 * HZ;
46
47 /*
48  * Receive window size in packets.  This indicates the maximum number of
49  * unconsumed received packets we're willing to retain in memory.  Once this
50  * limit is hit, we should generate an EXCEEDS_WINDOW ACK and discard further
51  * packets.
52  */
53 unsigned int rxrpc_rx_window_size = RXRPC_INIT_RX_WINDOW_SIZE;
54 #if (RXRPC_RXTX_BUFF_SIZE - 1) < RXRPC_INIT_RX_WINDOW_SIZE
55 #error Need to reduce RXRPC_INIT_RX_WINDOW_SIZE
56 #endif
57
58 /*
59  * Maximum Rx MTU size.  This indicates to the sender the size of jumbo packet
60  * made by gluing normal packets together that we're willing to handle.
61  */
62 unsigned int rxrpc_rx_mtu = 5692;
63
64 /*
65  * The maximum number of fragments in a received jumbo packet that we tell the
66  * sender that we're willing to handle.
67  */
68 unsigned int rxrpc_rx_jumbo_max = 4;
69
70 /*
71  * Time till packet resend (in jiffies).
72  */
73 unsigned int rxrpc_resend_timeout = 4 * HZ;
74
75 const char *const rxrpc_pkts[] = {
76         "?00",
77         "DATA", "ACK", "BUSY", "ABORT", "ACKALL", "CHALL", "RESP", "DEBUG",
78         "?09", "?10", "?11", "?12", "VERSION", "?14", "?15"
79 };
80
81 const s8 rxrpc_ack_priority[] = {
82         [0]                             = 0,
83         [RXRPC_ACK_DELAY]               = 1,
84         [RXRPC_ACK_REQUESTED]           = 2,
85         [RXRPC_ACK_IDLE]                = 3,
86         [RXRPC_ACK_PING_RESPONSE]       = 4,
87         [RXRPC_ACK_DUPLICATE]           = 5,
88         [RXRPC_ACK_OUT_OF_SEQUENCE]     = 6,
89         [RXRPC_ACK_EXCEEDS_WINDOW]      = 7,
90         [RXRPC_ACK_NOSPACE]             = 8,
91 };
92
93 const char *rxrpc_acks(u8 reason)
94 {
95         static const char *const str[] = {
96                 "---", "REQ", "DUP", "OOS", "WIN", "MEM", "PNG", "PNR", "DLY",
97                 "IDL", "-?-"
98         };
99
100         if (reason >= ARRAY_SIZE(str))
101                 reason = ARRAY_SIZE(str) - 1;
102         return str[reason];
103 }
104
105 const char rxrpc_skb_traces[rxrpc_skb__nr_trace][7] = {
106         [rxrpc_skb_rx_cleaned]          = "Rx CLN",
107         [rxrpc_skb_rx_freed]            = "Rx FRE",
108         [rxrpc_skb_rx_got]              = "Rx GOT",
109         [rxrpc_skb_rx_lost]             = "Rx *L*",
110         [rxrpc_skb_rx_received]         = "Rx RCV",
111         [rxrpc_skb_rx_purged]           = "Rx PUR",
112         [rxrpc_skb_rx_rotated]          = "Rx ROT",
113         [rxrpc_skb_rx_seen]             = "Rx SEE",
114         [rxrpc_skb_tx_cleaned]          = "Tx CLN",
115         [rxrpc_skb_tx_freed]            = "Tx FRE",
116         [rxrpc_skb_tx_got]              = "Tx GOT",
117         [rxrpc_skb_tx_lost]             = "Tx *L*",
118         [rxrpc_skb_tx_new]              = "Tx NEW",
119         [rxrpc_skb_tx_rotated]          = "Tx ROT",
120         [rxrpc_skb_tx_seen]             = "Tx SEE",
121 };
122
123 const char rxrpc_conn_traces[rxrpc_conn__nr_trace][4] = {
124         [rxrpc_conn_new_client]         = "NWc",
125         [rxrpc_conn_new_service]        = "NWs",
126         [rxrpc_conn_queued]             = "QUE",
127         [rxrpc_conn_seen]               = "SEE",
128         [rxrpc_conn_got]                = "GOT",
129         [rxrpc_conn_put_client]         = "PTc",
130         [rxrpc_conn_put_service]        = "PTs",
131 };
132
133 const char rxrpc_client_traces[rxrpc_client__nr_trace][7] = {
134         [rxrpc_client_activate_chans]   = "Activa",
135         [rxrpc_client_alloc]            = "Alloc ",
136         [rxrpc_client_chan_activate]    = "ChActv",
137         [rxrpc_client_chan_disconnect]  = "ChDisc",
138         [rxrpc_client_chan_pass]        = "ChPass",
139         [rxrpc_client_chan_unstarted]   = "ChUnst",
140         [rxrpc_client_cleanup]          = "Clean ",
141         [rxrpc_client_count]            = "Count ",
142         [rxrpc_client_discard]          = "Discar",
143         [rxrpc_client_duplicate]        = "Duplic",
144         [rxrpc_client_exposed]          = "Expose",
145         [rxrpc_client_replace]          = "Replac",
146         [rxrpc_client_to_active]        = "->Actv",
147         [rxrpc_client_to_culled]        = "->Cull",
148         [rxrpc_client_to_idle]          = "->Idle",
149         [rxrpc_client_to_inactive]      = "->Inac",
150         [rxrpc_client_to_waiting]       = "->Wait",
151         [rxrpc_client_uncount]          = "Uncoun",
152 };
153
154 const char rxrpc_transmit_traces[rxrpc_transmit__nr_trace][4] = {
155         [rxrpc_transmit_wait]           = "WAI",
156         [rxrpc_transmit_queue]          = "QUE",
157         [rxrpc_transmit_queue_reqack]   = "QRA",
158         [rxrpc_transmit_queue_last]     = "QLS",
159         [rxrpc_transmit_rotate]         = "ROT",
160         [rxrpc_transmit_end]            = "END",
161 };
162
163 const char rxrpc_receive_traces[rxrpc_receive__nr_trace][4] = {
164         [rxrpc_receive_incoming]        = "INC",
165         [rxrpc_receive_queue]           = "QUE",
166         [rxrpc_receive_queue_last]      = "QLS",
167         [rxrpc_receive_front]           = "FRN",
168         [rxrpc_receive_rotate]          = "ROT",
169         [rxrpc_receive_end]             = "END",
170 };
171
172 const char rxrpc_recvmsg_traces[rxrpc_recvmsg__nr_trace][5] = {
173         [rxrpc_recvmsg_enter]           = "ENTR",
174         [rxrpc_recvmsg_wait]            = "WAIT",
175         [rxrpc_recvmsg_dequeue]         = "DEQU",
176         [rxrpc_recvmsg_hole]            = "HOLE",
177         [rxrpc_recvmsg_next]            = "NEXT",
178         [rxrpc_recvmsg_cont]            = "CONT",
179         [rxrpc_recvmsg_full]            = "FULL",
180         [rxrpc_recvmsg_data_return]     = "DATA",
181         [rxrpc_recvmsg_terminal]        = "TERM",
182         [rxrpc_recvmsg_to_be_accepted]  = "TBAC",
183         [rxrpc_recvmsg_return]          = "RETN",
184 };
This page took 0.04433 seconds and 4 git commands to generate.