func()

in google_guest_agent/network/manager/netplan_linux.go [246:304]


func (n *netplan) writeNetworkdDropin(interfaces, ipv6Interfaces []string) (bool, error) {
	var requiresReload bool
	stat, err := os.Stat(n.networkdDropinDir)
	if err != nil {
		return false, fmt.Errorf("failed to stat systemd-networkd's drop-in root dir: %w", err)
	}

	if !stat.IsDir() {
		return false, fmt.Errorf("systemd-networkd drop-in dir(%s) is not a dir", n.networkdDropinDir)
	}

	for i, iface := range interfaces {
		if !shouldManageInterface(i == 0) {
			logger.Debugf("ManagePrimaryNIC is disabled, skipping writeNetworkdDropin for %s", iface)
			continue
		}
		if isInvalid(iface) {
			continue
		}
		logger.Debugf("writing systemd-networkd drop-in config for %s", iface)

		var dhcp = "ipv4"
		if slices.Contains(ipv6Interfaces, iface) {
			dhcp = "yes"
		}

		// Create and setup ini file.
		data := networkdNetplanDropin{
			Match: systemdMatchConfig{
				Name: iface,
			},
			Network: systemdNetworkConfig{
				DNSDefaultRoute: true,
				DHCP:            dhcp,
			},
		}

		// We are only interested on DHCP offered routes on the primary nic,
		// ignore it for the secondary ones.
		if i != 0 {
			data.Network.DNSDefaultRoute = false
			data.DHCPv4 = &systemdDHCPConfig{
				RoutesToDNS: false,
				RoutesToNTP: false,
			}
		}

		wrote, err := data.write(n, iface)
		if err != nil {
			return false, fmt.Errorf("failed to write systemd drop-in config: %w", err)
		}

		if wrote {
			requiresReload = true
		}
	}

	return requiresReload, nil
}