Exemple #1
0
static int cmd_ipconfig_show(struct vmm_chardev *cdev, int argc, char **argv)
{
	u8 buf[4];
	char str[30];
	char *p;

	vmm_cprintf(cdev, "Network stack Configuration:\n");
	p = netstack_get_name();
	vmm_cprintf(cdev, "   TCP/IP stack name  : %s\n", p);
	netstack_get_ipaddr(buf);
	p = ip4addr_to_str(str, buf);
	vmm_cprintf(cdev, "   IP address         : %s\n", p);
	netstack_get_ipmask(buf);
	p = ip4addr_to_str(str, buf);
	vmm_cprintf(cdev, "   IP netmask         : %s\n", p);
	netstack_get_gatewayip(buf);
	p = ip4addr_to_str(str, buf);
	vmm_cprintf(cdev, "   Gateway IP address : %s\n", p);
	netstack_get_hwaddr(buf);
	p = ethaddr_to_str(str, buf);
	vmm_cprintf(cdev, "   HW address         : %s\n", p);

	return VMM_OK;
}
Exemple #2
0
static int cmd_ping_exec(struct vmm_chardev *cdev, int argc, char **argv)
{
	u16 sent, rcvd, count = 1, size = 56;
	struct netstack_echo_reply reply;
	char ip_addr_str[20];
	u32 rtt_usecs, rtt_msecs;
	u64 min_rtt = -1, max_rtt = 0, avg_rtt = 0;
	u8 ipaddr[4];
	if((argc < 2) || (argc > 4)) {
		cmd_ping_usage(cdev);
		return VMM_EFAIL;
	}
	if(argc > 2) {
		count = atoi(argv[2]);
	}
	if(argc > 3) {
		size = atoi(argv[3]);
	}
	str2ipaddr(ipaddr, argv[1]);

	vmm_cprintf(cdev, "PING (%s) %d(%d) bytes of data.\n", 
			  argv[1], size, (size + IP4_HLEN + ICMP_HLEN));

	netstack_prefetch_arp_mapping(ipaddr);

	for(sent=0, rcvd=0; sent<count; sent++) {
		if (!netstack_send_echo(ipaddr, size, sent, &reply)) {
			if (reply.rtt < min_rtt)
				min_rtt = reply.rtt;
			if (reply.rtt > max_rtt)
				max_rtt = reply.rtt;
			avg_rtt += reply.rtt;
			rtt_msecs = udiv64(reply.rtt, 1000);
			rtt_usecs = umod64(reply.rtt, 1000);
			ip4addr_to_str(ip_addr_str, (const u8 *)&reply.ripaddr);
			vmm_cprintf(cdev, "%d bytes from %s: seq=%d "
				    "ttl=%d time=%d.%03dms\n", reply.len,
				    ip_addr_str, reply.seqno, reply.ttl,
				    rtt_msecs, rtt_usecs);
			rcvd++;
		}
	}
	if (min_rtt == -1) {
		min_rtt = 0;
	}
	if (rcvd) {
		avg_rtt = udiv64(avg_rtt, rcvd);
	} else {
		avg_rtt = 0;
	}
	vmm_cprintf(cdev, "\n----- %s ping statistics -----\n", argv[1]);
	vmm_cprintf(cdev, "%d packets transmitted, %d packets received\n", 
								sent, rcvd);
	vmm_cprintf(cdev, "round-trip min/avg/max = ");
	rtt_msecs = udiv64(min_rtt, 1000);
	rtt_usecs = umod64(min_rtt, 1000);
	vmm_cprintf(cdev, "%d.%03d/", rtt_msecs, rtt_usecs); 
	rtt_msecs = udiv64(avg_rtt, 1000);
	rtt_usecs = umod64(avg_rtt, 1000);
	vmm_cprintf(cdev, "%d.%03d/", rtt_msecs, rtt_usecs); 
	rtt_msecs = udiv64(max_rtt, 1000);
	rtt_usecs = umod64(max_rtt, 1000);
	vmm_cprintf(cdev, "%d.%03d ms\n", rtt_msecs, rtt_usecs); 

	return VMM_OK;
}