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