17
17
18
18
extern unsigned int kcm_net_id ;
19
19
20
+ #define KCM_STATS_ADD (stat , count ) ((stat) += (count))
21
+ #define KCM_STATS_INCR (stat ) ((stat)++)
22
+
23
+ struct kcm_psock_stats {
24
+ unsigned long long rx_msgs ;
25
+ unsigned long long rx_bytes ;
26
+ unsigned long long tx_msgs ;
27
+ unsigned long long tx_bytes ;
28
+ unsigned int rx_aborts ;
29
+ unsigned int rx_mem_fail ;
30
+ unsigned int rx_need_more_hdr ;
31
+ unsigned int rx_bad_hdr_len ;
32
+ unsigned long long reserved ;
33
+ unsigned long long unreserved ;
34
+ unsigned int tx_aborts ;
35
+ };
36
+
37
+ struct kcm_mux_stats {
38
+ unsigned long long rx_msgs ;
39
+ unsigned long long rx_bytes ;
40
+ unsigned long long tx_msgs ;
41
+ unsigned long long tx_bytes ;
42
+ unsigned int rx_ready_drops ;
43
+ unsigned int tx_retries ;
44
+ unsigned int psock_attach ;
45
+ unsigned int psock_unattach_rsvd ;
46
+ unsigned int psock_unattach ;
47
+ };
48
+
49
+ struct kcm_stats {
50
+ unsigned long long rx_msgs ;
51
+ unsigned long long rx_bytes ;
52
+ unsigned long long tx_msgs ;
53
+ unsigned long long tx_bytes ;
54
+ };
55
+
20
56
struct kcm_tx_msg {
21
57
unsigned int sent ;
22
58
unsigned int fragidx ;
@@ -41,6 +77,8 @@ struct kcm_sock {
41
77
u32 done : 1 ;
42
78
struct work_struct done_work ;
43
79
80
+ struct kcm_stats stats ;
81
+
44
82
/* Transmit */
45
83
struct kcm_psock * tx_psock ;
46
84
struct work_struct tx_work ;
@@ -77,6 +115,8 @@ struct kcm_psock {
77
115
78
116
struct list_head psock_list ;
79
117
118
+ struct kcm_psock_stats stats ;
119
+
80
120
/* Receive */
81
121
struct sk_buff * rx_skb_head ;
82
122
struct sk_buff * * rx_skb_nextp ;
@@ -86,15 +126,21 @@ struct kcm_psock {
86
126
struct delayed_work rx_delayed_work ;
87
127
struct bpf_prog * bpf_prog ;
88
128
struct kcm_sock * rx_kcm ;
129
+ unsigned long long saved_rx_bytes ;
130
+ unsigned long long saved_rx_msgs ;
89
131
90
132
/* Transmit */
91
133
struct kcm_sock * tx_kcm ;
92
134
struct list_head psock_avail_list ;
135
+ unsigned long long saved_tx_bytes ;
136
+ unsigned long long saved_tx_msgs ;
93
137
};
94
138
95
139
/* Per net MUX list */
96
140
struct kcm_net {
97
141
struct mutex mutex ;
142
+ struct kcm_psock_stats aggregate_psock_stats ;
143
+ struct kcm_mux_stats aggregate_mux_stats ;
98
144
struct list_head mux_list ;
99
145
int count ;
100
146
};
@@ -110,6 +156,9 @@ struct kcm_mux {
110
156
struct list_head psocks ; /* List of all psocks on MUX */
111
157
int psocks_cnt ; /* Total attached sockets */
112
158
159
+ struct kcm_mux_stats stats ;
160
+ struct kcm_psock_stats aggregate_psock_stats ;
161
+
113
162
/* Receive */
114
163
spinlock_t rx_lock ____cacheline_aligned_in_smp ;
115
164
struct list_head kcm_rx_waiters ; /* KCMs waiting for receiving */
@@ -122,4 +171,49 @@ struct kcm_mux {
122
171
struct list_head kcm_tx_waiters ; /* KCMs waiting for a TX psock */
123
172
};
124
173
174
+ #ifdef CONFIG_PROC_FS
175
+ int kcm_proc_init (void );
176
+ void kcm_proc_exit (void );
177
+ #else
178
+ static int kcm_proc_init (void ) { return 0 ; }
179
+ static void kcm_proc_exit (void ) { }
180
+ #endif
181
+
182
+ static inline void aggregate_psock_stats (struct kcm_psock_stats * stats ,
183
+ struct kcm_psock_stats * agg_stats )
184
+ {
185
+ /* Save psock statistics in the mux when psock is being unattached. */
186
+
187
+ #define SAVE_PSOCK_STATS (_stat ) (agg_stats->_stat += stats->_stat)
188
+ SAVE_PSOCK_STATS (rx_msgs );
189
+ SAVE_PSOCK_STATS (rx_bytes );
190
+ SAVE_PSOCK_STATS (rx_aborts );
191
+ SAVE_PSOCK_STATS (rx_mem_fail );
192
+ SAVE_PSOCK_STATS (rx_need_more_hdr );
193
+ SAVE_PSOCK_STATS (rx_bad_hdr_len );
194
+ SAVE_PSOCK_STATS (tx_msgs );
195
+ SAVE_PSOCK_STATS (tx_bytes );
196
+ SAVE_PSOCK_STATS (reserved );
197
+ SAVE_PSOCK_STATS (unreserved );
198
+ SAVE_PSOCK_STATS (tx_aborts );
199
+ #undef SAVE_PSOCK_STATS
200
+ }
201
+
202
+ static inline void aggregate_mux_stats (struct kcm_mux_stats * stats ,
203
+ struct kcm_mux_stats * agg_stats )
204
+ {
205
+ /* Save psock statistics in the mux when psock is being unattached. */
206
+
207
+ #define SAVE_MUX_STATS (_stat ) (agg_stats->_stat += stats->_stat)
208
+ SAVE_MUX_STATS (rx_msgs );
209
+ SAVE_MUX_STATS (rx_bytes );
210
+ SAVE_MUX_STATS (tx_msgs );
211
+ SAVE_MUX_STATS (tx_bytes );
212
+ SAVE_MUX_STATS (rx_ready_drops );
213
+ SAVE_MUX_STATS (psock_attach );
214
+ SAVE_MUX_STATS (psock_unattach_rsvd );
215
+ SAVE_MUX_STATS (psock_unattach );
216
+ #undef SAVE_MUX_STATS
217
+ }
218
+
125
219
#endif /* __NET_KCM_H_ */
0 commit comments