9 #define INPUT_BUF_SIZE 256
10 #define MAX_NR_ARGS 100
21 void custom_peer_usage()
26 static int forward(struct peerd *peer, struct peer_req *pr)
29 r = submit_peer_req(peer, pr);
31 printf("couldn't forward request");
37 static int complete_forwarded(struct peerd *peer, struct peer_req *pr)
39 struct xseg_request *req = pr->req;
41 // assert mio->src_portno != NoPort
42 if (req->state & XS_SERVED)
44 else if (req->state & XS_FAILED)
47 printf("invalid state\n");
53 int dispatch(struct peerd *peer, struct peer_req *pr, struct xseg_request *xreq,
54 enum dispatch_reason reason)
56 struct xseg_request *req = pr->req;
57 if (req->state & (XS_SERVED | XS_FAILED)){
58 log_pr("completing", pr);
59 complete_forwarded(peer, pr);
62 log_pr("forwarding", pr);
68 int mpause(struct peerd *peer)
70 struct xseg *xseg = peer->xseg;
71 struct xseg_port *port = xseg_get_port(xseg, peer->portno_start);
75 xlock_acquire(&port->rq_lock, peer->portno_start);
76 xlock_acquire(&port->pq_lock, peer->portno_start);
80 int munpause(struct peerd *peer)
82 struct xseg *xseg = peer->xseg;
83 struct xseg_port *port = xseg_get_port(xseg, peer->portno_start);
87 xlock_release(&port->rq_lock);
88 xlock_release(&port->pq_lock);
92 struct peerd *main_peer;
97 struct peerd * peer = main_peer;
98 char buf[INPUT_BUF_SIZE];
101 unsigned int portno = NoPort, dstgw, srcgw;
104 printf("waitin next line\n");
105 if (fgets(buf, INPUT_BUF_SIZE, stdin)) {
106 nl = strchr(buf, '\n');
109 buf[INPUT_BUF_SIZE -1] = 0;
110 printf("got line input\n");
111 ret = sscanf(buf, "set srcgw %u %u", &portno, &srcgw);
113 printf("found setsrcgw\n");
114 xseg_set_srcgw(peer->xseg, (uint32_t) portno, (uint32_t) srcgw);
117 ret = sscanf(buf, "set dstgw %u %u", &portno, &dstgw);
119 printf("found set dstgw\n");
120 xseg_set_dstgw(peer->xseg, (uint32_t) portno, (uint32_t) dstgw);
123 ret = sscanf(buf, "getandset srcgw %u %u", &portno, &srcgw);
125 printf("found getand set srcgw\n");
126 xseg_getandset_srcgw(peer->xseg, (uint32_t) portno, (uint32_t) srcgw);
129 ret = sscanf(buf, "getandset dstgw %u %u", &portno, &dstgw);
131 printf("found getandset dstgw\n");
132 xseg_getandset_dstgw(peer->xseg, (uint32_t) portno, (uint32_t) dstgw);
135 ret = sscanf(buf, "pause %u", &portno);
137 printf("found pause\n");
141 ret = sscanf(buf, "unpause %u", &portno);
143 printf("found unpause\n");
153 int custom_peer_init(struct peerd *peer, int argc, char *argv[])
156 struct monitor_io *mio;
157 struct monitord *monitor;
159 monitor = malloc(sizeof(struct monitord));
162 peer->priv = monitor;
163 monitor->mon_portno = NoPort;
166 for (i = 0; i < peer->nr_ops; i++) {
167 mio = malloc(sizeof(struct monitor_io));
170 peer->peer_reqs[i].priv = mio;
171 mio->src_portno = NoPort;
174 for (i = 1; i < argc; i++) {
175 if (!strcmp(argv[i], "-mp") && (i + 1 < argc)) {
176 monitor->mon_portno = atoi(argv[i+1]);
183 peer->interactive_func = main_loop;
188 void custom_peer_finalize(struct peerd *peer)