xref: /plan9/sys/src/cmd/ip/udpecho.c (revision f27a9a5a0b699d2f44893d9491ecc2336a1fbc19)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <ip.h>
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier void
usage(void)67dd7cddfSDavid du Colombier usage(void)
77dd7cddfSDavid du Colombier {
87dd7cddfSDavid du Colombier 	fprint(2, "usage: %s [-x netmtpt]\n", argv0);
97dd7cddfSDavid du Colombier 	exits("usage");
107dd7cddfSDavid du Colombier }
117dd7cddfSDavid du Colombier 
127dd7cddfSDavid du Colombier void
main(int argc,char ** argv)137dd7cddfSDavid du Colombier main(int argc, char **argv)
147dd7cddfSDavid du Colombier {
157dd7cddfSDavid du Colombier 	int fd, cfd, n;
16*f27a9a5aSDavid du Colombier 	char buf[4096], data[128], devdir[40], net[32];
177dd7cddfSDavid du Colombier 
18*f27a9a5aSDavid du Colombier 	setnetmtpt(net, sizeof net, nil);
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier 	ARGBEGIN{
217dd7cddfSDavid du Colombier 	case 'x':
22*f27a9a5aSDavid du Colombier 		setnetmtpt(net, sizeof net, EARGF(usage()));
237dd7cddfSDavid du Colombier 		break;
247dd7cddfSDavid du Colombier 	}ARGEND;
257dd7cddfSDavid du Colombier 
267dd7cddfSDavid du Colombier 	sprint(data, "%s/udp!*!echo", net);
277dd7cddfSDavid du Colombier 	cfd = announce(data, devdir);
287dd7cddfSDavid du Colombier 	if(cfd < 0)
29*f27a9a5aSDavid du Colombier 		sysfatal("can't announce %s: %r", data);
307dd7cddfSDavid du Colombier 	if(fprint(cfd, "headers") < 0)
317dd7cddfSDavid du Colombier 		sysfatal("can't set header mode: %r");
327dd7cddfSDavid du Colombier 
337dd7cddfSDavid du Colombier 	sprint(data, "%s/data", devdir);
347dd7cddfSDavid du Colombier 	fd = open(data, ORDWR);
357dd7cddfSDavid du Colombier 	if(fd < 0)
36*f27a9a5aSDavid du Colombier 		sysfatal("open %s: %r", data);
37*f27a9a5aSDavid du Colombier 	while ((n = read(fd, buf, sizeof buf)) > 0)
38*f27a9a5aSDavid du Colombier 		write(fd, buf, n);
397dd7cddfSDavid du Colombier 	if (n < 0)
407dd7cddfSDavid du Colombier 		sysfatal("error reading: %r");
41*f27a9a5aSDavid du Colombier 	exits(0);
427dd7cddfSDavid du Colombier }
43