9 #define BEGIN_READ_ARGS(__ac, __av) \
11 char **__argv = __av; \
13 for (__i = 0; __i < __argc; __i++) {
15 #define END_READ_ARGS() \
18 #define READ_ARG_ULONG(__name, __var) \
19 if (!strcmp(__argv[__i], __name) && __i + 1 < __argc){ \
20 __var = strtoul(__argv[__i+1], NULL, 10); \
25 #define READ_ARG_STRING(__name, __var, __max_len) \
26 if (!strcmp(__argv[__i], __name) && __i + 1 < __argc){ \
27 strncpy(__var, __argv[__i+1], __max_len); \
28 __var[__max_len] = 0; \
33 #define READ_ARG_BOOL(__name, __var) \
34 if (!strcmp(__argv[__i], __name)){ \
42 /* main peer structs */
45 struct xseg_request *req;
59 uint32_t defer_portno;
60 struct peer_req *peer_reqs;
65 struct thread *thread;
67 void (*interactive_func)(void);
71 enum dispatch_reason {
77 void fail(struct peerd *peer, struct peer_req *pr);
78 void complete(struct peerd *peer, struct peer_req *pr);
79 void defer_request(struct peerd *peer, struct peer_req *pr);
80 void pending(struct peerd *peer, struct peer_req *req);
81 void log_pr(char *msg, struct peer_req *pr);
82 int canDefer(struct peerd *peer);
83 int submit_peer_req(struct peerd *peer, struct peer_req *pr);
84 struct peer_req *alloc_peer_req(struct peerd *peer);
85 void free_peer_req(struct peerd *peer, struct peer_req *pr);
86 void get_submits_stats();
87 void get_responds_stats();
91 int thread_execute(struct peerd *peer, void (*func)(void *arg), void *arg);
94 static inline struct peerd * __get_peerd(void * custom_peerd)
96 return (struct peerd *) ((unsigned long) custom_peerd - offsetof(struct peerd, priv));
100 /* decration of "common" variables */
101 extern struct log_ctx lc;
107 /********************************
108 * mandatory peer functions *
109 ********************************/
111 /* peer main function */
112 int custom_peer_init(struct peerd *peer, int argc, char *argv[]);
113 void custom_peer_finalize(struct peerd *peer);
115 /* dispatch function */
116 int dispatch(struct peerd *peer, struct peer_req *pr, struct xseg_request *req,
117 enum dispatch_reason reason);
119 void custom_peer_usage();