xref: /plan9/sys/src/cmd/ip/hogports.c (revision b59479fc350fab15150576b68de452d0775f14f2)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier 
49a747e4fSDavid du Colombier void
hogport(char * proto,int port)59a747e4fSDavid du Colombier hogport(char *proto, int port)
69a747e4fSDavid du Colombier {
79a747e4fSDavid du Colombier 	char buf[256];
89a747e4fSDavid du Colombier 	char dir[40];
99a747e4fSDavid du Colombier 
109a747e4fSDavid du Colombier 	snprint(buf, sizeof(buf), "%s!%d", proto, port);
119a747e4fSDavid du Colombier 	if(announce(buf, dir) < 0)
129a747e4fSDavid du Colombier 		fprint(2, "%s: can't hog %s\n", argv0, buf);
139a747e4fSDavid du Colombier }
149a747e4fSDavid du Colombier 
159a747e4fSDavid du Colombier void
hogrange(char * str)169a747e4fSDavid du Colombier hogrange(char *str)
179a747e4fSDavid du Colombier {
189a747e4fSDavid du Colombier 	char *er, *sr;
199a747e4fSDavid du Colombier 	int start, end;
209a747e4fSDavid du Colombier 
219a747e4fSDavid du Colombier 	sr = strrchr(str, '!');
229a747e4fSDavid du Colombier 	if(sr == nil)
239a747e4fSDavid du Colombier 		sysfatal("bad range: %s", str);
249a747e4fSDavid du Colombier 	*sr++ = 0;
259a747e4fSDavid du Colombier 
269a747e4fSDavid du Colombier 	er = strchr(sr, '-');
279a747e4fSDavid du Colombier 	if(er == nil)
289a747e4fSDavid du Colombier 		er = sr;
299a747e4fSDavid du Colombier 	else
309a747e4fSDavid du Colombier 		er++;
319a747e4fSDavid du Colombier 
329a747e4fSDavid du Colombier 	start = atoi(sr);
339a747e4fSDavid du Colombier 	end = atoi(er);
349a747e4fSDavid du Colombier 	if(end < start)
359a747e4fSDavid du Colombier 		sysfatal("bad range: %s", sr);
369a747e4fSDavid du Colombier 
379a747e4fSDavid du Colombier 	for(; start <= end; start++)
389a747e4fSDavid du Colombier 		hogport(str, start);
399a747e4fSDavid du Colombier }
409a747e4fSDavid du Colombier 
419a747e4fSDavid du Colombier void
main(int argc,char ** argv)429a747e4fSDavid du Colombier main(int argc, char **argv)
439a747e4fSDavid du Colombier {
449a747e4fSDavid du Colombier 	int i;
459a747e4fSDavid du Colombier 
469a747e4fSDavid du Colombier 	ARGBEGIN{
479a747e4fSDavid du Colombier 	}ARGEND;
489a747e4fSDavid du Colombier 
499a747e4fSDavid du Colombier 	if(argc == 0){
50*b59479fcSDavid du Colombier 		fprint(2, "usage: %s portrange\n", argv0);
519a747e4fSDavid du Colombier 		exits("usage");
529a747e4fSDavid du Colombier 	}
539a747e4fSDavid du Colombier 
549a747e4fSDavid du Colombier 	switch(rfork(RFREND|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){
559a747e4fSDavid du Colombier 	case 0:
569a747e4fSDavid du Colombier 		close(0);
579a747e4fSDavid du Colombier 		close(1);
589a747e4fSDavid du Colombier 		break;
599a747e4fSDavid du Colombier 	case -1:
609a747e4fSDavid du Colombier 		abort(); /* "fork failed\n" */;
619a747e4fSDavid du Colombier 	default:
629a747e4fSDavid du Colombier 		_exits(0);
639a747e4fSDavid du Colombier 	}
649a747e4fSDavid du Colombier 
659a747e4fSDavid du Colombier 	for(i = 0; i < argc; i++)
669a747e4fSDavid du Colombier 		hogrange(argv[i]);
679a747e4fSDavid du Colombier 
689a747e4fSDavid du Colombier 	close(2);
699a747e4fSDavid du Colombier 	for(;;)
709a747e4fSDavid du Colombier 		sleep(10000);
719a747e4fSDavid du Colombier }
72