Bug fixes for delloem lan command. This includes the
support for 12G Dell license and 12G LAN Specific command.


Signed-off-by: Srinivas Gowda G <srinivas_g_go...@dell.com>
---
 lib/ipmi_delloem.c |  194 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 162 insertions(+), 32 deletions(-)

diff --git a/lib/ipmi_delloem.c b/lib/ipmi_delloem.c
index 4c01f73..078bdca 100644
--- a/lib/ipmi_delloem.c
+++ b/lib/ipmi_delloem.c
@@ -73,28 +73,37 @@ POSSIBILITY OF SUCH DAMAGE.
 #define DELL_OEM_NETFN        (uint8_t)(0x30)
 #define GET_IDRAC_VIRTUAL_MAC      (uint8_t)(0xC9)
 // 11g Support Macros
-#define INVALID -1
-#define SHARED 0
-#define SHARED_WITH_FAILOVER_LOM2 1
-#define DEDICATED 2
-#define SHARED_WITH_FAILOVER_ALL_LOMS 3
-char AciveLOM_String [5] [10] =        
{"dedicated","LOM1","LOM2","LOM3","LOM4" };
-#define        INVALID -1
-
-// 11g Support Strings for nic selection
-char NIC_Selection_Mode_String [4] [50] =      {       "shared",  
-                                                                               
                "shared with failover lom2",
-                                                                               
                "dedicated",
-                                                                               
                "shared with Failover all loms"
-                                                                               
        };
+#define INVALID                        -1
+#define SHARED                         0
+#define SHARED_WITH_FAILOVER_LOM2      1
+#define DEDICATED                      2
+#define SHARED_WITH_FAILOVER_ALL_LOMS  3
+char AciveLOM_String [6] [10] =        
{"None","LOM1","LOM2","LOM3","LOM4","dedicated" };
+
+/* 11g Support Strings for nic selection */
+char NIC_Selection_Mode_String [4] [50] =      {       
+                                               "shared", 
+                                               "shared with failover lom2",
+                                               "dedicated",
+                                               "shared with Failover all loms"
+                                               };
+
+/* 11g Support Macros */
+#define SHARED                                 0
+#define SHARED_WITH_FAILOVER_LOM2      1
+#define DEDICATED                      2
+#define SHARED_WITH_FAILOVER_ALL_LOMS  3
+
+/* 12g Support Strings for nic selection */
+#define        INVAILD_FAILOVER_MODE           -2
+#define        INVAILD_FAILOVER_MODE_SETTINGS  -3
+#define        INVAILD_SHARED_MODE             -4
+
+#define        INVAILD_FAILOVER_MODE_STRING    "ERROR: Cannot set shared with 
failover lom same as current shared lom.\n"
+#define        INVAILD_FAILOVER_MODE_SET       "ERROR: Cannot set shared with 
failover loms when NIC is set to dedicated Mode.\n"
+#define        INVAILD_SHARED_MODE_SET_STRING  "ERROR: Cannot set shared Mode 
for Blades.\n"
 
-// 11g Support Macros
-#define SHARED 0
-#define SHARED_WITH_FAILOVER_LOM2 1
-#define DEDICATED 2
-#define SHARED_WITH_FAILOVER_ALL_LOMS 3
 
-// 12g Support Strings for nic selection
 char NIC_Selection_Mode_String_12g[] [50] =    {       
                                                                                
                "dedicated",
                                                                                
                "shared with lom1",  
@@ -1218,6 +1227,10 @@ ipmi_lcd_get_info_wh(struct ipmi_intf * intf)
         {
             printf("    Setting:  IPV6 Address\n");
         }
+        else if (lcd_mode.lcdmode == IPMI_DELL_LCD_ASSET_TAG) 
+               {
+                       printf("    Setting:  Asset Tag\n");
+               }               
         else if (lcd_mode.lcdmode == IPMI_DELL_LCD_AMBEINT_TEMP) 
         {
             printf("    Setting:  Ambient Temp\n");
@@ -2485,6 +2498,15 @@ static int ipmi_delloem_lan_main (struct ipmi_intf * 
intf, int argc, char ** arg
                        {
                                ipmi_lan_usage();
                                return -1;
+                       } else if(INVAILD_FAILOVER_MODE == nic_selection) {
+                               printf(INVAILD_FAILOVER_MODE_STRING); 
+                               return 0;
+                       } else if(INVAILD_FAILOVER_MODE_SETTINGS == 
nic_selection){
+                               printf(INVAILD_FAILOVER_MODE_SET); 
+                               return 0;
+                       } else if(INVAILD_SHARED_MODE == nic_selection){
+                               printf(INVAILD_SHARED_MODE_SET_STRING); 
+                               return 0;
                        }                               
                
                        rc = ipmi_lan_set_nic_selection_12g(intf,nic_set);
@@ -2498,6 +2520,10 @@ static int ipmi_delloem_lan_main (struct ipmi_intf * 
intf, int argc, char ** arg
         {
             ipmi_lan_usage();
             return -1;
+                       }
+                       if(IMC_IDRAC_11G_MODULAR == IMC_Type) {
+                               printf(INVAILD_SHARED_MODE_SET_STRING); 
+                               return 0;                               
         }                               
         rc = ipmi_lan_set_nic_selection(intf,nic_selection);
                }               
@@ -2540,6 +2566,7 @@ static int IsLANSupported ()
 
 int get_nic_selection_mode_12g (struct ipmi_intf* intf,int current_arg, char 
** argv, char *nic_set)
 {
+       int nic_selection_mode = 0;
        int failover = 0;
 
        // First get the current settings.
@@ -2579,6 +2606,7 @@ int get_nic_selection_mode_12g (struct ipmi_intf* 
intf,int current_arg, char **
        if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"dedicated\0", 10)) 
        {
                nic_set[0] = 1;
+               nic_set[1] = 0;
                return 0;
        }
        if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"shared\0", 7)) 
@@ -2604,47 +2632,110 @@ int get_nic_selection_mode_12g (struct ipmi_intf* 
intf,int current_arg, char **
                current_arg++;  
        if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"lom1\0", 5)) 
        {
+               if(IMC_IDRAC_12G_MODULAR == IMC_Type)
+               {
+                       return INVAILD_SHARED_MODE;
+               }
                if(failover) {
+                       if(nic_set[0] == 2)
+                       {
+                               return INVAILD_FAILOVER_MODE;   
+                       } else if(nic_set[0] == 1) {
+                               return INVAILD_FAILOVER_MODE_SETTINGS;  
+                       }               
                        nic_set[1] = 2;
                }       
                else {
+                       
                        nic_set[0] = 2;
+                       if(nic_set[1] == 2)
+                               nic_set[1] = 0; 
                }       
                return 0;
        }
        else if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"lom2\0", 5)) 
        {
+       
+               if(IMC_IDRAC_12G_MODULAR == IMC_Type)
+               {
+                       return INVAILD_SHARED_MODE;
+               }
                if(failover) {          
-                       nic_set[1] = 3;
+                       if(nic_set[0] == 3)
+                       {
+                               return INVAILD_FAILOVER_MODE;   
+                       } else if(nic_set[0] == 1) {
+                               return INVAILD_FAILOVER_MODE_SETTINGS;  
+                       }                               
+                       nic_set[1] = 3;                 
                }       
                else {
                        nic_set[0] = 3;
+                       if(nic_set[1] == 3)
+                               nic_set[1] = 0; 
                }       
                return 0;
        }
        else if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"lom3\0", 5)) 
        {
+       
+               if(IMC_IDRAC_12G_MODULAR == IMC_Type)
+               {
+                       return INVAILD_SHARED_MODE;
+               }
                if(failover) {  
-                       nic_set[1] = 4;
+                       if(nic_set[0] == 4)
+                       {
+                               return INVAILD_FAILOVER_MODE;   
+                       } else if(nic_set[0] == 1) {
+                               return INVAILD_FAILOVER_MODE_SETTINGS;  
+                       }                               
+                       nic_set[1] = 4;                 
+                       
                }       
                else {
                        nic_set[0] = 4;
+                       if(nic_set[1] == 4)
+                               nic_set[1] = 0; 
+                       
                }       
                return 0;
        } 
        else if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"lom4\0", 5)) 
        {
+       
+               if(IMC_IDRAC_12G_MODULAR == IMC_Type)
+               {
+                       return INVAILD_SHARED_MODE;
+               }
                if(failover) {  
-                       nic_set[1] = 5;
+                       if(nic_set[0] == 5)
+                       {
+                               return INVAILD_FAILOVER_MODE;   
+                       } else if(nic_set[0] == 1) {
+                               return INVAILD_FAILOVER_MODE_SETTINGS;  
+                       }                               
+                       nic_set[1] = 5;                 
                }       
                else {
                        nic_set[0] = 5;
+                       if(nic_set[1] == 5)
+                               nic_set[1] = 0; 
+                       
                }       
                return 0;
        }       
        else if (failover && NULL!= argv[current_arg] && 0 == 
strncmp(argv[current_arg], "none\0", 5)) 
        {
+       
+               if(IMC_IDRAC_12G_MODULAR == IMC_Type)
+               {
+                       return INVAILD_SHARED_MODE;
+               }
                if(failover) {  
+                       if(nic_set[0] == 1) {
+                               return INVAILD_FAILOVER_MODE_SETTINGS;  
+                       }       
                        nic_set[1] = 0;
                }       
                return 0;
@@ -2658,6 +2749,14 @@ int get_nic_selection_mode_12g (struct ipmi_intf* 
intf,int current_arg, char **
        current_arg++;  
        if (failover && NULL!= argv[current_arg] && 0 == 
strncmp(argv[current_arg], "loms\0", 5)) 
        {
+       
+               if(IMC_IDRAC_12G_MODULAR == IMC_Type)
+               {
+                       return INVAILD_SHARED_MODE;
+               }
+               if(nic_set[0] == 1) {
+                       return INVAILD_FAILOVER_MODE_SETTINGS;  
+               }       
                nic_set[1] = 6;
                return 0;
        }       
@@ -2669,6 +2768,7 @@ int get_nic_selection_mode_12g (struct ipmi_intf* 
intf,int current_arg, char **
 
 static int get_nic_selection_mode (int current_arg, char ** argv)
 {
+    int nic_selection_mode = 0;
     if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], 
"dedicated\0", 10)) 
     {
         return DEDICATED;
@@ -2834,13 +2934,13 @@ static int ipmi_lan_get_nic_selection (struct 
ipmi_intf* intf)
                if ((nic_selection < 6) && (nic_selection > 0) && 
(nic_selection_failover < 7))
                {
                        if(nic_selection == 1) {
-                               printf 
("\n%s",NIC_Selection_Mode_String_12g[nic_selection-1]);
+                               printf 
("%s\n",NIC_Selection_Mode_String_12g[nic_selection-1]);
                        } else if(nic_selection) {
-                               printf ("\nShared LOM   :  
%s",NIC_Selection_Mode_String_12g[nic_selection-1]);
+                               printf ("Shared LOM   :  
%s\n",NIC_Selection_Mode_String_12g[nic_selection-1]);
                                if(nic_selection_failover  == 0)
-                                       printf ("\nFailover LOM :  None");
+                                       printf ("Failover LOM :  None\n");
                                else if(nic_selection_failover   >= 2 && 
nic_selection_failover   <= 6)
-                                       printf ("\nFailover LOM :  
%s",NIC_Selection_Mode_String_12g[nic_selection_failover + 3]);
+                                       printf ("Failover LOM :  
%s\n",NIC_Selection_Mode_String_12g[nic_selection_failover + 3]);
                        }
                                
                } 
@@ -2852,7 +2952,7 @@ static int ipmi_lan_get_nic_selection (struct ipmi_intf* 
intf)
        }
        else
        {
-    printf ("\n%s",NIC_Selection_Mode_String[nic_selection]);
+               printf ("%s\n",NIC_Selection_Mode_String[nic_selection]);
        }
 
     return 0;
@@ -2860,7 +2960,8 @@ static int ipmi_lan_get_nic_selection (struct ipmi_intf* 
intf)
 
 static int ipmi_lan_get_active_nic (struct ipmi_intf* intf)
 {
-    uint8_t active_nic=0;
+       uint8_t active_nic=0;
+       uint8_t current_lom =0;
 
     struct ipmi_rs * rsp;
     struct ipmi_rq req;
@@ -2892,9 +2993,38 @@ static int ipmi_lan_get_active_nic (struct ipmi_intf* 
intf)
             val2str(rsp->ccode, completion_code_vals) );
         return -1;
     }
-    active_nic = rsp->data[0];
-    if (active_nic < 5)
-        printf ("\n%s",AciveLOM_String[active_nic]);
+       
+       current_lom = rsp->data[0];
+       
+    input_length = 0;
+
+       msg_data[input_length++] = 1; //Get Link status
+       msg_data[input_length++] = 0; //Reserved
+       msg_data[input_length++] = 0; //Reserved        
+       
+       req.msg.netfn = DELL_OEM_NETFN;
+       req.msg.lun = 0;                
+       req.msg.cmd = GET_ACTIVE_NIC_CMD;
+       req.msg.data = msg_data;
+       req.msg.data_len = input_length;
+  
+       rsp = intf->sendrecv(intf, &req);
+       if (rsp == NULL)
+       {
+               lprintf(LOG_ERR, " Error in getting Active LOM Status");
+               return -1;
+       }
+       else if (rsp->ccode > 0) 
+       {
+               lprintf(LOG_ERR, " Error in getting Active LOM Status (%s) \n",
+                 val2str(rsp->ccode, completion_code_vals) );
+               return -1;
+       }
+       active_nic = rsp->data[1];
+       if (current_lom < 6 && active_nic)
+               printf ("\n%s\n",AciveLOM_String[current_lom]);
+       else
+               printf ("\n%s\n",AciveLOM_String[0]);
 
     return 0;
 }      
-- 
1.7.7.6


Thanks,
G
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel

Reply via email to