// ping sends icmp packets from machine a to b using the ping tool. func ping(a, b platform.Machine, ifname string) error { srcip, err := mach2bip(a, ifname) if err != nil { return fmt.Errorf("failed to get docker bridge ip: %v", err) } dstip, err := mach2bip(b, ifname) if err != nil { return fmt.Errorf("failed to get docker bridge ip: %v", err) } // ensure the docker bridges have the right network _, ipnet, _ := net.ParseCIDR("10.254.0.0/16") if !ipnet.Contains(net.ParseIP(srcip)) || !ipnet.Contains(net.ParseIP(dstip)) { return fmt.Errorf("bridge ips (%s %s) not in flannel network (%s)", srcip, dstip, ipnet) } plog.Infof("ping from %s(%s) to %s(%s)", a.ID(), srcip, b.ID(), dstip) cmd := fmt.Sprintf("ping -c 10 -I %s %s", srcip, dstip) out, err := a.SSH(cmd) if err != nil { return fmt.Errorf("ping from %s to %s failed: %s: %v", a.ID(), b.ID(), out, err) } return nil }