in google_guest_agent/network/manager/dhclient_linux.go [544:579]
func (n *dhclient) RollbackNics(ctx context.Context, nics *Interfaces) error {
// Determine if we can even rollback dhclient processes.
if isInstalled, err := n.isDhclientInstalled(); !isInstalled || err != nil {
logger.Debugf("No preconditions met for dhclient roll back, skipping.")
return nil
}
googleInterfaces, googleIpv6Interfaces := interfaceListsIpv4Ipv6(nics.EthernetInterfaces)
// Release all the interface leases from dhclient.
for _, iface := range googleInterfaces {
ipv4Exists, err := dhclientProcessExists(ctx, iface, ipv4)
if err != nil {
return fmt.Errorf("error checking if ipv4 dhclient process for %s exists: %v", iface, err)
}
if ipv4Exists {
if err = runDhclient(ctx, ipv4, iface, true); err != nil {
return err
}
}
}
for _, iface := range googleIpv6Interfaces {
ipv6Exists, err := dhclientProcessExists(ctx, iface, ipv6)
if err != nil {
return fmt.Errorf("error checking if ipv6 dhclient process for %s exists: %v", iface, err)
}
if ipv6Exists {
if err = runDhclient(ctx, ipv6, iface, true); err != nil {
return err
}
}
}
return nil
}