shithub: riscv

Download patch

ref: 2dddca984762847a5fca656d62fee1bb5a00541e
parent: 8f2d9a139fa48e964e46be4bc8b7b451a0a721c9
author: cinap_lenrek <[email protected]>
date: Sat Mar 12 18:27:49 EST 2016

ip/gping: ignore advice, fix packet corruption check, remove dead code

--- a/sys/src/cmd/ip/gping.c
+++ b/sys/src/cmd/ip/gping.c
@@ -205,26 +205,6 @@
 	cols[5][2] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x888888FF);
 }
 
-int
-loadbuf(Machine *m, int *fd)
-{
-	int n;
-
-
-	if(*fd < 0)
-		return 0;
-	seek(*fd, 0, 0);
-	n = read(*fd, m->buf, sizeof m->buf);
-	if(n <= 0){
-		close(*fd);
-		*fd = -1;
-		return 0;
-	}
-	m->bufp = m->buf;
-	m->ebufp = m->buf+n;
-	return 1;
-}
-
 void
 label(Point p, int dy, char *text)
 {
@@ -516,10 +496,9 @@
 void
 pingrcv(void *arg)
 {
-	int i, n, fd;
+	int i, n;
 	uchar buf[512];
 	ushort x;
-	vlong now;
 	Icmphdr *ip;
 	Ip4hdr *ip4;
 	Machine *m = arg;
@@ -526,24 +505,22 @@
 
 	ip4 = (Ip4hdr *)buf;
 	ip = (Icmphdr *)(buf + IPV4HDR_LEN);
-	fd = dup(m->pingfd, -1);
 	for(;;){
-		n = read(fd, buf, sizeof(buf));
-		now = nsec();
+		n = read(m->pingfd, buf, sizeof(buf));
 		if(n <= 0)
+			break;
+		if(n < MSGLEN)
 			continue;
-		if(n < MSGLEN){
-			print("bad len %d/%d\n", n, MSGLEN);
-			continue;
-		}
 		for(i = 32; i < MSGLEN; i++)
 			if(buf[i] != (i&0xff))
-				continue;
+				break;
+		if(i != MSGLEN)
+			continue;
 		x = (ip->seq[1]<<8) | ip->seq[0];
 		if(ip->type != EchoReply || ip->code != 0)
 			continue;
 		lock(m);
-		pingclean(m, x, now, ip4->ttl);
+		pingclean(m, x, nsec(), ip4->ttl);
 		unlock(m);
 	}
 }
@@ -551,6 +528,7 @@
 void
 initmach(Machine *m, char *name)
 {
+	int cfd = -1;
 	char *p;
 
 	srand(time(0));
@@ -563,9 +541,11 @@
 
 	m->name = estrdup(p);
 	m->nproc = 1;
-	m->pingfd = dial(netmkaddr(m->name, "icmp", "1"), 0, 0, 0);
+	m->pingfd = dial(netmkaddr(m->name, "icmp", "1"), nil, nil, &cfd);
 	if(m->pingfd < 0)
 		sysfatal("dialing %s: %r", m->name);
+	write(cfd, "ignoreadvice", 12);
+	close(cfd);
 	startproc(pingrcv, m);
 }