xref: /plan9/sys/src/cmd/ip/udpecho.c (revision f27a9a5a0b699d2f44893d9491ecc2336a1fbc19)
1 #include <u.h>
2 #include <libc.h>
3 #include <ip.h>
4 
5 void
usage(void)6 usage(void)
7 {
8 	fprint(2, "usage: %s [-x netmtpt]\n", argv0);
9 	exits("usage");
10 }
11 
12 void
main(int argc,char ** argv)13 main(int argc, char **argv)
14 {
15 	int fd, cfd, n;
16 	char buf[4096], data[128], devdir[40], net[32];
17 
18 	setnetmtpt(net, sizeof net, nil);
19 
20 	ARGBEGIN{
21 	case 'x':
22 		setnetmtpt(net, sizeof net, EARGF(usage()));
23 		break;
24 	}ARGEND;
25 
26 	sprint(data, "%s/udp!*!echo", net);
27 	cfd = announce(data, devdir);
28 	if(cfd < 0)
29 		sysfatal("can't announce %s: %r", data);
30 	if(fprint(cfd, "headers") < 0)
31 		sysfatal("can't set header mode: %r");
32 
33 	sprint(data, "%s/data", devdir);
34 	fd = open(data, ORDWR);
35 	if(fd < 0)
36 		sysfatal("open %s: %r", data);
37 	while ((n = read(fd, buf, sizeof buf)) > 0)
38 		write(fd, buf, n);
39 	if (n < 0)
40 		sysfatal("error reading: %r");
41 	exits(0);
42 }
43