/// <summary>
        ///  Get chassis network properties
        /// </summary>
        /// <returns>Response packet containing network properties</returns>
        public ChassisNetworkPropertiesResponse GetChassisNetworkProperties()
        {
            string[] ipAddresses, subnets, gateways = null;
            string dnsHostName, dhcpServer, dnsDomain, macAddress = null;
            int physicalIndex;

            bool dhcpEnabled = true;

            ChassisNetworkPropertiesResponse response = new ChassisNetworkPropertiesResponse();
            response.chassisNetworkPropertyCollection = new List<ChassisNetworkProperty>();

            Tracer.WriteInfo("Received GetChassisNetworkProperties()");
            Tracer.WriteUserLog("Invoked GetChassisNetworkProperties()");

            // Set default completion code to unknown.
            response.completionCode = Contracts.CompletionCode.Unknown;
            response.statusDescription = String.Empty;

            try
            {

                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    if (!string.IsNullOrEmpty((string)mo["MACAddress"]))
                    {
                        int logicalIndex = -1;
                        uint index = (uint)mo["Index"];
                        if (index >= 0)
                        {
                            logicalIndex = (int)index;
                        }
                        else
                        {
                            // Failed to verify Index
                            Console.WriteLine(@"Could not obtain network controller interface Index.");
                            response.completionCode = Contracts.CompletionCode.Failure;
                            return response;
                        }

                        physicalIndex = Contracts.SharedFunc.NetworkCtrlPhysicalIndex(logicalIndex);

                        // Configure specified network interface
                        if (physicalIndex > -1)
                        {
                            // If interface has IP enabled
                            if ((bool)mo["ipEnabled"])
                            {

                                ipAddresses = (string[])mo["IPAddress"];
                                subnets = (string[])mo["IPSubnet"];
                                gateways = (string[])mo["DefaultIPGateway"];
                                dnsHostName = (string)mo["DNSHostName"];
                                dhcpServer = (string)mo["DHCPServer"];
                                dnsDomain = (string)mo["DNSDomain"];
                                macAddress = (string)mo["MACAddress"];
                                dhcpEnabled = (bool)mo["DHCPEnabled"];

                                // response object
                                ChassisNetworkProperty cr = new ChassisNetworkProperty();

                                if (ipAddresses != null)
                                {
                                    for (int i = 0; i < ipAddresses.Count(); i++)
                                    {
                                        if (ChassisManagerUtil.CheckIpFormat(ipAddresses[i]))
                                        {
                                            if (string.IsNullOrEmpty(cr.ipAddress))
                                                cr.ipAddress = ipAddresses[i].ToString();
                                            else
                                                cr.ipAddress += ", " + ipAddresses[i].ToString();
                                        }
                                    }
                                }

                                if (subnets != null)
                                {
                                    for (int i = 0; i < subnets.Count(); i++)
                                    {
                                        if (string.IsNullOrEmpty(cr.subnetMask))
                                            cr.subnetMask = subnets[i].ToString();
                                        else
                                            cr.subnetMask += ", " + subnets[i].ToString();
                                    }
                                }

                                if (gateways != null)
                                {
                                    for (int i = 0; i < gateways.Count(); i++)
                                    {
                                        if (string.IsNullOrEmpty(cr.gatewayAddress))
                                            cr.gatewayAddress = gateways[i].ToString();
                                        else
                                            cr.gatewayAddress += ", " + gateways[i].ToString();
                                    }
                                }

                                cr.dhcpServer = dhcpServer;
                                cr.dnsDomain = dnsDomain;
                                cr.dnsHostName = dnsHostName;
                                cr.macAddress = macAddress;
                                cr.dhcpEnabled = dhcpEnabled;
                                cr.completionCode = Contracts.CompletionCode.Success;
                                cr.PhysicalIndex = physicalIndex;
                                response.chassisNetworkPropertyCollection.Add(cr);
                            }
                            else // all other interfaces (with ip not enables)
                            {
                                macAddress = (string)mo["MACAddress"];
                                // Populating interfaces only with valid mac addresses - ignoring loopback and other virtual interfaces
                                if (macAddress != null)
                                {
                                    ChassisNetworkProperty cr = new ChassisNetworkProperty();
                                    cr.macAddress = macAddress;
                                    cr.completionCode = Contracts.CompletionCode.Success;
                                    cr.PhysicalIndex = physicalIndex;
                                    response.chassisNetworkPropertyCollection.Add(cr);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Tracer.WriteError("GetChassisNetworkProperties failed with exception:" + ex.Message);
                response.completionCode = Contracts.CompletionCode.Failure;
                response.statusDescription = String.Format("GetChassisNetworkProperties failed with exception:" + ex.Message);
            }

            // sort by physical address
            response.chassisNetworkPropertyCollection.Sort();

            response.completionCode = Contracts.CompletionCode.Success;
            return response;
        }
        /// <summary>
        ///  Get chassis network properties
        /// </summary>
        /// <returns>Response packet containing network properties</returns>
        public ChassisNetworkPropertiesResponse GetChassisNetworkProperties()
        {
            string[] ipAddresses, subnets, gateways = null;
            string dnsHostName, dhcpServer, dnsDomain, macAddress = null;

            bool dhcpEnabled = true;

            ChassisNetworkPropertiesResponse response = new ChassisNetworkPropertiesResponse();
            response.chassisNetworkPropertyCollection = new List<ChassisNetworkProperty>();

            Tracer.WriteInfo("Received GetChassisNetworkProperties()");
            Tracer.WriteUserLog("Invoked GetChassisNetworkProperties()");

            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();

            // Set default completion code to unknown.
            response.completionCode = Contracts.CompletionCode.Unknown;
            response.statusDescription = String.Empty;

            try
            {
                foreach (ManagementObject mo in moc)
                {
                    // If interface has IP enabled
                    if ((bool)mo["ipEnabled"])
                    {
                        ipAddresses = (string[])mo["IPAddress"];
                        subnets = (string[])mo["IPSubnet"];
                        gateways = (string[])mo["DefaultIPGateway"];
                        dnsHostName = (string)mo["DNSHostName"];
                        dhcpServer = (string)mo["DHCPServer"];
                        dnsDomain = (string)mo["DNSDomain"];
                        macAddress = (string)mo["MACAddress"];
                        dhcpEnabled = (bool)mo["DHCPEnabled"];
                        int loopCount = 0;
                        foreach (string ip in ipAddresses)
                        {
                            if (ChassisManagerUtil.CheckIpFormat(ip))
                            {
                                ChassisNetworkProperty cr = new ChassisNetworkProperty();
                                cr.ipAddress = ipAddresses.ToArray()[loopCount];
                                if (subnets != null)
                                {
                                    cr.subnetMask = subnets.ToArray()[loopCount];
                                }
                                if (gateways != null)
                                {
                                    cr.gatewayAddress = gateways.ToArray()[loopCount];
                                }
                                cr.dhcpServer = dhcpServer;
                                cr.dnsDomain = dnsDomain;
                                cr.dnsHostName = dnsHostName;
                                cr.macAddress = macAddress;
                                cr.dhcpEnabled = dhcpEnabled;
                                cr.completionCode = Contracts.CompletionCode.Success;
                                response.chassisNetworkPropertyCollection.Add(cr);
                            }
                            loopCount++;
                        }
                    }
                    else // all other interfaces (with ip not enables)
                    {
                        macAddress = (string)mo["MACAddress"];
                        // Populating interfaces only with valid mac addresses - ignoring loopback and other virtual interfaces
                        if (macAddress != null)
                        {
                            ChassisNetworkProperty cr = new ChassisNetworkProperty();
                            cr.macAddress = macAddress;
                            cr.completionCode = Contracts.CompletionCode.Success;
                            response.chassisNetworkPropertyCollection.Add(cr);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Tracer.WriteError("GetChassisNetworkProperties failed with exception :" + ex.Message);
                response.completionCode = Contracts.CompletionCode.Failure;
                response.statusDescription = String.Format("GetChassisNetworkProperties failed with exception :" + ex.Message);
            }

            response.completionCode = Contracts.CompletionCode.Success;
            return response;
        }