forked from sysprog21/kecho
-
Notifications
You must be signed in to change notification settings - Fork 0
/
echo_server.h
60 lines (48 loc) · 1.25 KB
/
echo_server.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef ECHO_SERVER_H
#define ECHO_SERVER_H
#include <linux/module.h>
#include <linux/workqueue.h>
#include <net/sock.h>
#define MODULE_NAME "kecho"
struct echo_server_param {
struct socket *listen_sock;
};
struct echo_service {
bool is_stopped;
struct list_head worker;
};
struct kecho {
struct socket *sock;
struct list_head list;
struct work_struct kecho_work;
};
extern int echo_server_daemon(void *);
#endif /* ECHO_SERVER_H */
#ifndef RUNTIME_STAT
#define RUNTIME_STAT
#include <linux/atomic.h>
enum {
TRACE_nop = 0,
TRACE_send_msg,
TRACE_recv_msg,
TRACE_shdn_msg,
TRACE_kmal_err,
TRACE_recv_err,
TRACE_send_err,
TRACE_work_err,
TRACE_acpt_err,
};
struct runtime_statistics {
atomic_t send_msg, recv_msg, shdn_msg;
atomic_t kmal_err, recv_err, send_err;
atomic_t work_err, acpt_err;
};
extern struct runtime_statistics stats;
#define TRACE(ops) \
do { \
if (TRACE_##ops) \
atomic_fetch_add_relaxed(1, &stats.ops); \
} while (0)
#define TRACE_PRINT(flags, ops) \
printk(flags MODULE_NAME ": %-10s: %d\n", #ops, stats.ops.counter);
#endif /* RUNTIME_STAT */