def __init__(self, screen, dev, macaddr): """ Constructor @type screen: SnackScreen @param screen: SnackScreen instance @type dev: string @param dev: network interface name """ self.__task = [False] self.__screen = screen self.__dev = NetDevice(dev) self.__interface = dev self.__macaddr = macaddr self.__hwdev = Entry(20, "%s" % dev) self.__hwdev.setFlags(FLAG_DISABLED, FLAGS_SET) self.__macAddress = Entry(20, macaddr) self.__macAddress.setFlags(FLAG_DISABLED, FLAGS_SET) self.__dhcp = Checkbox("") self.__ip = Entry(20, "") self.__netmask = Entry(20, "") self.__gateway = Entry(20, "") self.__bridge = Checkbox("") self.__enable = Checkbox("") self.__hwdevLabel = Label("Device") self.__macAddressLabel = Label("MAC Address") self.__dhcpLabel = Label("Use DHCP") self.__ipLabel = Label("Static IP") self.__netmaskLabel = Label("Netmask") self.__gatewayLabel = Label("Default gateway IP") self.__bridgeLabel = Label("Create Network Bridge (br%s)" % dev) self.__enableLabel = Label("Enable") self.__contentGrid = Grid(2, 8) self.__contentGrid.setField(self.__hwdevLabel, 0, 0, anchorLeft=1) self.__contentGrid.setField(self.__macAddressLabel, 0, 1, anchorLeft=1) self.__contentGrid.setField(self.__dhcpLabel, 0, 2, anchorLeft=1) self.__contentGrid.setField(self.__ipLabel, 0, 3, anchorLeft=1) self.__contentGrid.setField(self.__netmaskLabel, 0, 4, anchorLeft=1) self.__contentGrid.setField(self.__gatewayLabel, 0, 5, anchorLeft=1) self.__contentGrid.setField(self.__bridgeLabel, 0, 6, anchorLeft=1) self.__contentGrid.setField(self.__enableLabel, 0, 7, anchorLeft=1) self.__contentGrid.setField(self.__hwdev, 1, 0, (1, 0, 0, 0)) self.__contentGrid.setField(self.__macAddress, 1, 1, (1, 0, 0, 0)) self.__contentGrid.setField(self.__dhcp, 1, 2, (1, 0, 0, 0), anchorLeft=1) self.__contentGrid.setField(self.__ip, 1, 3, (1, 0, 0, 0)) self.__contentGrid.setField(self.__netmask, 1, 4, (1, 0, 0, 0)) self.__contentGrid.setField(self.__gateway, 1, 5, (1, 0, 0, 0)) self.__contentGrid.setField(self.__bridge, 1, 6, (1, 0, 0, 0), anchorLeft=1) self.__contentGrid.setField(self.__enable, 1, 7, (1, 0, 0, 0), anchorLeft=1) self.__dhcp.setCallback(self.useDynamicCheckBox) self.__buttonsBar = ButtonBar(self.__screen, (("Save", "save"), ("Back", "back"))) self.__grid = GridForm(self.__screen, "Network Device Configuration", 1, 3) self.__grid.add(self.__contentGrid, 0, 0, (0, 0, 0, 1)) self.__grid.add(self.__buttonsBar, 0, 1) self.useDynamicCheckBox()
class DeviceConfig: """ Represents the network interface configuration screen """ def __init__(self, screen, dev, macaddr): """ Constructor @type screen: SnackScreen @param screen: SnackScreen instance @type dev: string @param dev: network interface name """ self.__task = [False] self.__screen = screen self.__dev = NetDevice(dev) self.__interface = dev self.__macaddr = macaddr self.__hwdev = Entry(20, "%s" % dev) self.__hwdev.setFlags(FLAG_DISABLED, FLAGS_SET) self.__macAddress = Entry(20, macaddr) self.__macAddress.setFlags(FLAG_DISABLED, FLAGS_SET) self.__dhcp = Checkbox("") self.__ip = Entry(20, "") self.__netmask = Entry(20, "") self.__gateway = Entry(20, "") self.__bridge = Checkbox("") self.__enable = Checkbox("") self.__hwdevLabel = Label("Device") self.__macAddressLabel = Label("MAC Address") self.__dhcpLabel = Label("Use DHCP") self.__ipLabel = Label("Static IP") self.__netmaskLabel = Label("Netmask") self.__gatewayLabel = Label("Default gateway IP") self.__bridgeLabel = Label("Create Network Bridge (br%s)" % dev) self.__enableLabel = Label("Enable") self.__contentGrid = Grid(2, 8) self.__contentGrid.setField(self.__hwdevLabel, 0, 0, anchorLeft=1) self.__contentGrid.setField(self.__macAddressLabel, 0, 1, anchorLeft=1) self.__contentGrid.setField(self.__dhcpLabel, 0, 2, anchorLeft=1) self.__contentGrid.setField(self.__ipLabel, 0, 3, anchorLeft=1) self.__contentGrid.setField(self.__netmaskLabel, 0, 4, anchorLeft=1) self.__contentGrid.setField(self.__gatewayLabel, 0, 5, anchorLeft=1) self.__contentGrid.setField(self.__bridgeLabel, 0, 6, anchorLeft=1) self.__contentGrid.setField(self.__enableLabel, 0, 7, anchorLeft=1) self.__contentGrid.setField(self.__hwdev, 1, 0, (1, 0, 0, 0)) self.__contentGrid.setField(self.__macAddress, 1, 1, (1, 0, 0, 0)) self.__contentGrid.setField(self.__dhcp, 1, 2, (1, 0, 0, 0), anchorLeft=1) self.__contentGrid.setField(self.__ip, 1, 3, (1, 0, 0, 0)) self.__contentGrid.setField(self.__netmask, 1, 4, (1, 0, 0, 0)) self.__contentGrid.setField(self.__gateway, 1, 5, (1, 0, 0, 0)) self.__contentGrid.setField(self.__bridge, 1, 6, (1, 0, 0, 0), anchorLeft=1) self.__contentGrid.setField(self.__enable, 1, 7, (1, 0, 0, 0), anchorLeft=1) self.__dhcp.setCallback(self.useDynamicCheckBox) self.__buttonsBar = ButtonBar(self.__screen, (("Save", "save"), ("Back", "back"))) self.__grid = GridForm(self.__screen, "Network Device Configuration", 1, 3) self.__grid.add(self.__contentGrid, 0, 0, (0, 0, 0, 1)) self.__grid.add(self.__buttonsBar, 0, 1) self.useDynamicCheckBox() # __init__() def useDynamicCheckBox(self): """ Handles the dhcp check box @rtype: None @returns: nothing """ if self.__dhcp.selected(): state = FLAGS_SET else: state = FLAGS_RESET for i in self.__ip, self.__netmask, self.__gateway: i.setFlags(FLAG_DISABLED, state) # useDynamicCheckBox() def __saveConfig(self): """ Write the configuration into the file @rtype: None @returns: nothing """ # bridge if self.__bridge.selected(): self.__dev.setBridge(True) else: self.__dev.setBridge(False) # device self.__dev.setDev(self.__interface, self.__macaddr) # onboot if self.__hasLink(): if self.__enable.selected(): self.__dev.setOnBoot(True) else: self.__dev.setOnBoot(False) else: self.__dev.setOnBoot(False) # dns self.__dev.setDNS() # dhcp if self.__dhcp.selected(): self.__dev.enableDHCP(True) else: self.__dev.enableDHCP(False) self.__dev.setIp(self.__ip.value()) self.__dev.setNetmask(self.__netmask.value()) self.__dev.setGateway(self.__gateway.value()) # Saving network cfg file Network.writeConfigFile(self.__dev.getEthConfigFile()) if self.__dev.hasBridge(): Network.writeConfigFile(self.__dev.getBrConfigFile()) else: Network.deleteBrConfigFile(self.__interface) # __saveConfig() def __hasLink(self): """ Return the link status of the NIC @rtype: boolean @returns: True if NIC has link """ activeLinkInterfaces = Network.getLinkedInterfaces(False) link = False if self.__interface in activeLinkInterfaces: link = True return link # __hasLink() def run(self): """ Draws the screen @rtype: integer @returns: status of operation """ # dhcp if self.__dev.getBootProto() == "dhcp": self.__dhcp.setValue('*') self.__grid.setCurrent(self.__dhcp) # bridge if self.__dev.hasBridge(): self.__bridge.setValue('*') # onboot if self.__hasLink(): if self.__dev.getOnBoot(): self.__enable.setValue('*') else: self.__enable.setFlags(FLAG_DISABLED, FLAGS_SET) self.__grid.setCurrent(self.__bridge) self.__ip.set(Network.removeDoubleQuotes(self.__dev.getIp())) self.__netmask.set(Network.removeDoubleQuotes(self.__dev.getNetmask())) self.__gateway.set(Network.removeDoubleQuotes(self.__dev.getGateway())) self.useDynamicCheckBox() result = self.__grid.run() self.__screen.popWindow() rc = self.__buttonsBar.buttonPressed(result) if rc == "save": if self.__dhcp.selected() or self.__ip.value() != "" or not self.__enable.selected(): self.__saveConfig() msg = TextboxReflowed(40, "Configuring %s interface..." % self.__hwdev.value()) g = GridForm(self.__screen, "IBM PowerKVM", 1, 2) g.add(msg, 0, 0) g.draw() self.__screen.refresh() try: # restart network service Network.restartNetworkService(None, self.__interface) return 0 except Exception as e: Network.disableNIC(None, self.__interface) ButtonChoiceWindow(self.__screen, "ERROR", "Failed to configure %s interface:\n%s" % (self.__interface, e), buttons=[BUTTON_OK], width=40) return -1 finally: self.__screen.popWindow() else: ButtonChoiceWindow(self.__screen, ERROR_INVALID_ENTRY, ERROR_INVALID_ENTRY_MSG, buttons=[BUTTON_OK], width=50) return 1 if rc == "back": return 1