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