// RemoveGuestInterfaces removes the interfaces for a guest func (ovs *OVS) RemoveGuestInterfaces(h *http.Request, request *rpc.GuestRequest, response *rpc.GuestResponse) error { if request.Guest == nil || request.Guest.Nics == nil { return errors.New("missing guest with nics") } for i, nic := range request.Guest.Nics { if nic.Name == "" { continue } // Remove TAP interface from OVS if err := deleteOVSIface(nic.Network, nic.Name); err != nil { return err } // Remove TAP Interface if err := deleteTAPIface(nic.Name); err != nil { return err } request.Guest.Nics[i] = cleanNic(nic) } response.Guest = request.Guest return nil }
// AddGuestInterfaces creates new interfaces for a guest func (ovs *OVS) AddGuestInterfaces(h *http.Request, request *rpc.GuestRequest, response *rpc.GuestResponse) error { if request.Guest == nil || request.Guest.Nics == nil { return errors.New("missing guest with nics") } for i, nic := range request.Guest.Nics { if nic.Name != "" { continue } ifaceName, err := ovs.newIfaceName() if err != nil { return err } bridge := nic.Network if bridge == "" { bridge = ovs.bridge } // Create TAP interface if err := createTAPIface(ifaceName); err != nil { return err } // Add TAP interface to OVS if err := addOVSIface(bridge, ifaceName, 0); err != nil { // Clean up _ = deleteTAPIface(ifaceName) return err } // Populate the guest nic with new info iface, err := net.InterfaceByName(ifaceName) if err != nil { log.WithFields(log.Fields{ "error": err, "ifaceName": ifaceName, }).Error("failed to look up interface by name") return err } request.Guest.Nics[i].Name = iface.Name request.Guest.Nics[i].Device = iface.Name request.Guest.Nics[i].Network = bridge request.Guest.Nics[i].Mac = iface.HardwareAddr.String() } response.Guest = request.Guest return nil }