peers: Add threshold option on cli.
[archipelago] / xseg / peers / user / peer.h
index 2589526..cae484b 100644 (file)
  * or implied, of GRNET S.A.
  */
 
+#ifndef PEER_H
+
+#define PEER_H
+
 #include <stddef.h>
 #include <xseg/xseg.h>
 
@@ -83,6 +87,18 @@ struct peer_req {
 #ifdef ST_THREADS
        st_cond_t cond;
 #endif
+#ifdef MT
+       int thread_no;
+#endif
+};
+
+struct thread {
+       pthread_t tid;
+       struct peerd *peer;
+       int thread_no;
+       struct xq free_thread_reqs;
+       void *priv;
+       void *arg;
 };
 
 struct peerd {
@@ -90,6 +106,7 @@ struct peerd {
        xport portno_start;
        xport portno_end;
        long nr_ops;
+       uint64_t threshold;
        xport defer_portno;
        struct peer_req *peer_reqs;
        struct xq free_reqs;
@@ -100,6 +117,7 @@ struct peerd {
        struct thread *thread;
        struct xq threads;
        void (*interactive_func)(void);
+#else
 #endif
 };
 
@@ -115,17 +133,21 @@ int defer_request(struct peerd *peer, struct peer_req *pr);
 void pending(struct peerd *peer, struct peer_req *req);
 void log_pr(char *msg, struct peer_req *pr);
 int canDefer(struct peerd *peer);
-int submit_peer_req(struct peerd *peer, struct peer_req *pr);
-struct peer_req *alloc_peer_req(struct peerd *peer);
 void free_peer_req(struct peerd *peer, struct peer_req *pr);
+int submit_peer_req(struct peerd *peer, struct peer_req *pr);
 void get_submits_stats();
 void get_responds_stats();
 void usage();
 void print_req(struct xseg *xseg, struct xseg_request *req);
-int check_ports(struct peerd *peer);
+int all_peer_reqs_free(struct peerd *peer);
 
 #ifdef MT
 int thread_execute(struct peerd *peer, void (*func)(void *arg), void *arg);
+struct peer_req *alloc_peer_req(struct peerd *peer, struct thread *t);
+int check_ports(struct peerd *peer, struct thread *t);
+#else
+struct peer_req *alloc_peer_req(struct peerd *peer);
+int check_ports(struct peerd *peer);
 #endif
 
 static inline struct peerd * __get_peerd(void * custom_peerd)
@@ -160,3 +182,5 @@ int dispatch(struct peerd *peer, struct peer_req *pr, struct xseg_request *req,
                enum dispatch_reason reason);
 
 void custom_peer_usage();
+
+#endif /* end of PEER_H */