[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH rhel6-branch] Add auto_vlan option for fcoe devices in UI (#735857)



Resolves: rhbz#735857

This is a follow-up of patches from Broadcom. It was tested on
their side. The difference in handling of auto_vlan option
in installer environment (used only in dcb=False case) and
installed system (DCB_REQUIRED=yes and AUTO_VLAN=yes case
is possible) is intentional (consulted with reporters).

---
 iw/advanced_storage.py  |    2 ++
 kickstart.py            |    2 +-
 storage/devices.py      |    2 +-
 storage/fcoe.py         |   21 +++++++++++----------
 textw/add_drive_text.py |    7 +++++--
 ui/fcoe-config.glade    |   14 ++++++++++++++
 6 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/iw/advanced_storage.py b/iw/advanced_storage.py
index 6384d5f..8d6b0cc 100644
--- a/iw/advanced_storage.py
+++ b/iw/advanced_storage.py
@@ -323,6 +323,7 @@ def addFcoeDrive(anaconda):
     (dxml, dialog) = gui.getGladeWidget("fcoe-config.glade", "fcoeDialog")
     combo = dxml.get_widget("fcoeNicCombo")
     dcb_cb = dxml.get_widget("dcbCheckbutton")
+    auto_vlan_cb = dxml.get_widget("autovlanCheckbutton")
 
     # Populate the combo
     cell = gtk.CellRendererText()
@@ -384,6 +385,7 @@ def addFcoeDrive(anaconda):
         try:
             anaconda.id.storage.fcoe.addSan(store.get_value(iter, 1),
                                             dcb=dcb_cb.get_active(),
+                                            auto_vlan=auto_vlan_cb.get_active(),
                                             intf=anaconda.intf)
         except IOError as e:
             anaconda.intf.messageWindow(_("Error"), str(e))
diff --git a/kickstart.py b/kickstart.py
index de2dbe9..ff879cf 100644
--- a/kickstart.py
+++ b/kickstart.py
@@ -359,7 +359,7 @@ class Fcoe(commands.fcoe.F13_Fcoe):
         if fc.nic not in isys.getDeviceProperties():
             raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent nic %s in fcoe command" % fc.nic)
 
-        storage.fcoe.fcoe().addSan(nic=fc.nic, dcb=fc.dcb)
+        storage.fcoe.fcoe().addSan(nic=fc.nic, dcb=fc.dcb, auto_vlan=True)
 
         return fc
 
diff --git a/storage/devices.py b/storage/devices.py
index 3810b24..7a1ec16 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -3654,7 +3654,7 @@ class FcoeDiskDevice(DiskDevice, NetworkStorageDevice):
         dcb = True
 
         from .fcoe import fcoe
-        for nic, dcb in fcoe().nics:
+        for nic, dcb, auto_vlan in fcoe().nics:
             if nic == self.nic:
                 break
 
diff --git a/storage/fcoe.py b/storage/fcoe.py
index 568f55d..90492b0 100644
--- a/storage/fcoe.py
+++ b/storage/fcoe.py
@@ -90,7 +90,7 @@ class fcoe(object):
             return
 
         log.info("FCoE NIC found in EDD: %s" % val)
-        self.addSan(val, dcb=True, intf=intf)
+        self.addSan(val, dcb=True, auto_vlan=True, intf=intf)
 
     def startup(self, intf = None):
         if self.started:
@@ -110,11 +110,12 @@ class fcoe(object):
                                stdout = "/dev/tty5", stderr="/dev/tty5")
         self.lldpadStarted = True
 
-    def addSan(self, nic, dcb=False, intf=None):
+    def addSan(self, nic, dcb=False, auto_vlan=True, intf=None):
         if not has_fcoe():
             raise IOError, _("FCoE not available")
 
-        log.info("Activating FCoE SAN attached to %s, dcb: %s" % (nic, dcb))
+        log.info("Activating FCoE SAN attached to %s, dcb: %s autovlan: %s" %
+                 (nic, dcb, auto_vlan))
 
         iutil.execWithRedirect("ip", [ "link", "set", nic, "up" ],
                                stdout = "/dev/tty5", stderr="/dev/tty5")
@@ -129,10 +130,7 @@ class fcoe(object):
             iutil.execWithRedirect("fipvlan", [ nic, "-c", "-s" ],
                                stdout = "/dev/tty5", stderr="/dev/tty5")
         else:
-            # Use fipvlan instead of fcoe's create if nic uses bnx2x driver.
-            # Ideally, this should be done by checking a "AUTO_VLAN" parameter,
-            # not bnx2x driver usage
-            if 'bnx2x' in os.path.realpath('/sys/class/net/%s/device/driver' %(nic)):
+            if auto_vlan:
                 # certain network configrations require the VLAN layer module:
                 iutil.execWithRedirect("modprobe", ["8021q"],
                                        stdout = "/dev/tty5", stderr="/dev/tty5")
@@ -144,7 +142,7 @@ class fcoe(object):
                 f.close()
 
         self._stabilize(intf)
-        self.nics.append((nic, dcb))
+        self.nics.append((nic, dcb, auto_vlan))
 
     def writeKS(self, f):
         # fixme plenty (including add ks support for fcoe in general)
@@ -157,7 +155,7 @@ class fcoe(object):
         if not os.path.isdir(instPath + "/etc/fcoe"):
             os.makedirs(instPath + "/etc/fcoe", 0755)
 
-        for nic, dcb in self.nics:
+        for nic, dcb, auto_vlan in self.nics:
             fd = os.open(instPath + "/etc/fcoe/cfg-" + nic,
                          os.O_RDWR | os.O_CREAT)
             os.write(fd, '# Created by anaconda\n')
@@ -169,7 +167,10 @@ class fcoe(object):
             else:
                 os.write(fd, 'DCB_REQUIRED="no"\n')
             os.write(fd, '# Indicate if VLAN discovery should be handled by fcoemon\n')
-            os.write(fd, 'AUTO_VLAN="yes"\n')
+            if auto_vlan:
+                os.write(fd, 'AUTO_VLAN="yes"\n')
+            else:
+                os.write(fd, 'AUTO_VLAN="no"\n')
             os.close(fd)
 
         return
diff --git a/textw/add_drive_text.py b/textw/add_drive_text.py
index 546e68d..4a603c0 100644
--- a/textw/add_drive_text.py
+++ b/textw/add_drive_text.py
@@ -383,9 +383,11 @@ class addDriveDialog(object):
 
         dcbCheckbox = Checkbox(_("Use DCB"), 1)
         grid.add(dcbCheckbox, 0, 2, anchorLeft = 1)
+        autovlanCheckbox = Checkbox(_("Use auto vlan"), 1)
+        grid.add(autovlanCheckbox, 0, 3, anchorLeft = 1)
 
         buttons = ButtonBar(screen, [TEXT_OK_BUTTON, TEXT_BACK_BUTTON] )
-        grid.add(buttons, 0, 3, anchorLeft = 1, growx = 1)
+        grid.add(buttons, 0, 4, anchorLeft = 1, growx = 1)
 
         result = grid.run()
         if buttons.buttonPressed(result) == TEXT_BACK_CHECK:
@@ -394,8 +396,9 @@ class addDriveDialog(object):
 
         nic = interfaceList.current()
         dcb = dcbCheckbox.selected()
+        auto_vlan = autovlanCheckbox.selected()
 
-        storage.fcoe.fcoe().addSan(nic=nic, dcb=dcb,
+        storage.fcoe.fcoe().addSan(nic=nic, dcb=dcb, auto_vlan=auto_vlan,
                                    intf=self.anaconda.intf)
 
         screen.popWindow()
diff --git a/ui/fcoe-config.glade b/ui/fcoe-config.glade
index 6d7f017..503d2df 100644
--- a/ui/fcoe-config.glade
+++ b/ui/fcoe-config.glade
@@ -71,6 +71,20 @@ your FCoE switch.</property>
                 <property name="position">2</property>
               </packing>
             </child>
+            <child>
+              <widget class="GtkCheckButton" id="autovlanCheckbutton">
+                <property name="label" translatable="yes">Automatic VLAN discovery</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
           </widget>
           <packing>
             <property name="position">2</property>
-- 
1.7.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]