Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
Index: icmpinfo.c
===================================================================
--- icmpinfo.c	(nonexistent)
+++ icmpinfo.c	(revision 5)
@@ -0,0 +1,146 @@
+/*
+ * icmpinfo
+ *    It is a tool to look at the icmp you receive
+ *    Its source comes from a modified BSD ping source by Laurent Demailly
+ *
+ *              it comes AS IS - no warranty, etc...
+ *                    <dl@hplyot.obspm.fr>
+ *
+ * see the README for usage infos...etc...
+ *
+ */
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1987 Regents of the University of California.\n\
+ All rights reserved.\n augmented 4/94 by dl\n";
+#endif /* not lint */
+
+#ifndef lint
+static char sccsid[] = "@(#)ping.c	4.10 (Berkeley) 10/10/88 - $Author: icmpinfo-1.11- Laurent Demailly <dl@hplyot.obspm.fr>$";
+#endif /* not lint */
+
+#define DCLARE /* def : */
+
+#include  <stdlib.h>
+#include  "defs.h"
+
+/*
+ *			P I N G . C
+ *
+ * Using the InterNet Control Message Protocol (ICMP) "ECHO" facility,
+ * measure round-trip-delays and packet loss across network paths.
+ *
+ * Author -
+ *	Mike Muuss
+ *	U. S. Army Ballistic Research Laboratory
+ *	December, 1983
+ * Modified at Uc Berkeley
+ *
+ * Status -
+ *	Public Domain.  Distribution Unlimited.
+ *
+ * Bugs -
+ *	More statistics could always be gathered.
+ *	This program has to run SUID to ROOT to access the ICMP socket.
+ */
+
+char	usage[] = "Usage:  icmpinfo [-v[v[v]]] [-s] [-n] [-p] [-l] [-k]\n   -v : more and more info\n   -s : show local interface address\n   -n : no name query (dot ip only)\n   -p : no port -> service name query\n   -l : fork + syslog output\n   -k : kill background process\nv1.11 - 8/1995 - dl";
+char	*pname;
+
+int main(argc, argv)
+int	argc;
+char	**argv;
+{
+	int			sockoptions, on;
+	struct protoent		*proto;
+
+	on = 1;
+	pname = argv[0];
+	argc--;
+	argv++;
+
+	sockoptions=nonamequery=noportquery=syslogdoutput=showsrcip=0;
+	while (argc > 0 && *argv[0] == '-') {
+		while (*++argv[0]) switch (*argv[0]) {
+			case 'd':
+				sockoptions |= SO_DEBUG;
+				break;
+			case 'r':
+				sockoptions |= SO_DONTROUTE;
+				break;
+			case 'v':
+				verbose++;
+				break;
+			case 'n':
+				nonamequery++;
+				break;
+			case 'p':
+				noportquery++;
+				break;
+			case 'l':
+				syslogdoutput++;
+				break;
+			case 's':
+				showsrcip++;
+				break;
+			case 'k':
+				pid_kill();
+				exit(0);
+				break;
+			case 'h':
+		        default :
+				err_quit(usage);
+		}
+		argc--, argv++;
+	}
+	if (argc!=0) err_quit(usage);
+	if ( (proto = getprotobyname("icmp")) == NULL)
+		err_quit("unknown protocol: icmp");
+	if ( (sockfd = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0)
+		err_sys("can't create raw socket (root and/or bit s needed)");
+	if (sockoptions & SO_DEBUG)
+		if (setsockopt(sockfd, SOL_SOCKET, SO_DEBUG, &on,
+								sizeof(on)) < 0)
+			err_sys("setsockopt SO_DEBUG error");
+	if (sockoptions & SO_DONTROUTE)
+		if (setsockopt(sockfd, SOL_SOCKET, SO_DONTROUTE, &on,
+								sizeof(on)) < 0)
+			err_sys("setsockopt SO_DONTROUTE error");
+
+	if (syslogdoutput) {
+	  if (getuid()!=0)
+	    err_quit("You need root id to use the syslog/daemon -l option");
+	  if (fork()) {exit(0);}
+	  /* Can't check openlog & syslog retcodes 'cause lot of
+             unixes have void openlog(); and void syslog(); !! */
+	  openlog("icmpinfo",0,LOG_DAEMON);
+	  syslog(LOG_NOTICE,"started, PID=%d.",getpid());
+	  setsid();
+	  pid_file();
+	  close(0);
+	  close(1);
+	  close(2);
+	} else {
+	    printf("icmpinfo: Icmp monitoring in progress...\n");
+	}
+	recv_ping();	/* and start the receive */
+	/* NOTREACHED */
+	return(0);
+}