func()

in lib/ec2macosinit/networkcheck.go [23:57]


func (c *NetworkCheckModule) Do(ctx *ModuleContext) (message string, err error) {
	// Get default gateway
	out, err := executeCommand([]string{"/bin/zsh", "-c", "route -n get default | grep gateway"}, "", []string{})
	if err != nil {
		return "", fmt.Errorf("ec2macosinit: error while running route command to get default gateway with stderr [%s]: %s\n", out.stderr, err)
	}
	gatewayFields := strings.Fields(out.stdout)
	if len(gatewayFields) != 2 {
		return "", fmt.Errorf("ec2macosinit: unexpected output from route command: %s\n", out.stdout)
	}

	// Resolve IP address
	defaultGatewayIP, err := net.ResolveIPAddr("ip4", gatewayFields[1])
	if err != nil {
		return "", fmt.Errorf("ec2macosinit: error resolving default gateway IP address: %s\n", err)
	}

	// Ping default gateway
	pinger, err := ping.New("0.0.0.0", "")
	if err != nil {
		return "", fmt.Errorf("ec2macosinit: error setting up new pinger: %s\n", err)
	}
	// If PingCount is unset, default to 3
	if c.PingCount == 0 {
		c.PingCount = pingCountDefault
	}
	pinger.SetPayloadSize(pingPayloadSize)
	rtt, err := pinger.PingAttempts(defaultGatewayIP, time.Second, int(c.PingCount))
	if err != nil {
		// If network is not up, this will error with an i/o timeout
		return "", fmt.Errorf("ec2macosinit: error pinging default gateway: %s\n", err)
	}

	return fmt.Sprintf("successfully pinged default gateway with a RTT of %v", rtt), nil
}