//---------------------------------------------------------------------------- // // Copyright (c) Intel Corporation, 2012 - 2014 All Rights Reserved. // // File: WirelessRemoteFunctionality.cs // // Contents: Example that shows how to use WiFiConfiguration High Level API // // Notes: // //---------------------------------------------------------------------------- using System; using Intel.Manageability; using Intel.Manageability.Exceptions; using System.Collections.Generic; using HLAPI.Wireless; using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography; namespace WiFiConfigurationRemoteSample { public class WirelessRemoteFunctionality { #region Private Members private const string ADMIN_PROFILE_NAME = "Wireless-Profile-Admin"; private const string ADMIN_1X_PROFILE_NAME = "Wireless-Profile-Admin-1x"; private const string AMT_CERT = @"..\..\amtCert_sub1.p12"; private const string ROOT_CA = @"..\..\rootCA.cer"; IAMTInstance amt; #endregion #region Constructor public WirelessRemoteFunctionality(IAMTInstance amt) { this.amt = amt; } #endregion #region Public Functions public void SetAndGetLinkPolicy() { try { Console.WriteLine("\nSet and get link policy:"); Console.WriteLine("========================\n"); // Set link policy in the AMT machine. amt.Config.Wireless.SetWiFiLinkPolicy(WiFiLinkPolicy.EnableS0); Console.WriteLine("Enable WiFi link policy on S0 completed successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } try { // Get list of link policies. (The power states in which the wireless network works.) WiFiLinkPolicy linkPolicy = amt.Config.Wireless.GetWiFiLinkPolicy(); Console.WriteLine("Link policy is {0}.", linkPolicy); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void AddWirelessProfiles(string SSID) { # region ========== Admin Profile with PSKPassphrase ============================= Console.WriteLine("\nAdd admin profile with PSK passphrase:"); Console.WriteLine("====================================\n"); // Add admin wireless profile configuration setting. AdminProfile adminProfile = new AdminProfile(ADMIN_PROFILE_NAME, AdminEncryptionMethod.CCMP, AdminAuthenticationMethod.WPA2_PSK, "P@ssw0rd", SSID); // Set the admin profile to be primary. adminProfile.IsPrimary = true; try { // Add the profile in the AMT machine. amt.Config.Wireless.CreateOrUpdateProfile(adminProfile); Console.WriteLine("Wireless admin profile added successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } #endregion # region ========== Admin 802.1x Profile with UserCredential ===================== Console.WriteLine("\nAdd admin 802.1x profile with user credential:"); Console.WriteLine("============================================\n"); // Add admin 1.x wireless profile configuration setting with client certificate. Admin1XProfile admin802_1xProfile = new Admin1XProfile(ADMIN_1X_PROFILE_NAME, AdminEncryptionMethod.CCMP, Admin1XAuthenticationMethod.WPA2_IEEE_802_1x, AuthenticationProtocol.EAP_TTLS_MSCHAPv2, new UserCredential("admin", "P@ssw0rd", "Intel"), SSID); try { // Add the profile in the AMT machine. amt.Config.Wireless.CreateOrUpdateProfile(admin802_1xProfile); Console.WriteLine("Wireless admin 1x profile added successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } #endregion } public void UpdateWirelessProfiles(string SSID) { #region ========== Admin Profile with PSK Value ================================== Console.WriteLine("\nUpdate admin profile with PSK value:"); Console.WriteLine("====================================\n"); // Update admin wireless profile configuration setting. AdminProfile adminProfile = new AdminProfile(ADMIN_PROFILE_NAME, AdminEncryptionMethod.TKIP, AdminAuthenticationMethod.WPA2_PSK, ConvertStringToByteArray("P@ssw0rdP@ssw0rdP@ssw0rdP@ssw0rd"), SSID); // Change the admin profile to not be primary. adminProfile.IsPrimary = false; try { // Update the profile in the AMT machine. amt.Config.Wireless.CreateOrUpdateProfile(adminProfile); Console.WriteLine("Wireless admin profile updated successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } #endregion #region ========== Admin 802.1x Profile with ClientCertificate =================== Console.WriteLine("\nUpdate admin 802.1x profile with client certificate:"); Console.WriteLine("====================================================\n"); try { Admin1XProfile admin802_1xProfile; using (X509Certificate2 clientCertificate = new X509Certificate2(AMT_CERT, "q", X509KeyStorageFlags.Exportable)) { admin802_1xProfile = new Admin1XProfile(ADMIN_1X_PROFILE_NAME, AdminEncryptionMethod.TKIP, Admin1XAuthenticationMethod.WPA_IEEE_802_1x, "admin", clientCertificate, SSID); } admin802_1xProfile.CACertificate = new CACertificate(new X509Certificate2(ROOT_CA)); amt.Config.CertificateManagement.ManageCertificateManually = false; try { // Update the profile in the AMT machine. amt.Config.Wireless.CreateOrUpdateProfile(admin802_1xProfile); Console.WriteLine("Wireless admin 1x profile updated successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } catch (CryptographicException ex) { Console.WriteLine(ex.Message); return; } #endregion } public void GetWirelessProfiles() { try { Console.WriteLine("\nGet active wireless profile:"); Console.WriteLine("============================\n"); // Get and print active profile. Profile activeProfile = amt.Config.Wireless.GetActiveProfile(); if (activeProfile != null) PrintProfile(activeProfile); else Console.WriteLine("No wireless profile is active in the Intel AMT machine."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } try { // Get and print admin wireless profile by ProfileName. PrintProfile(amt.Config.Wireless.GetProfile(ADMIN_PROFILE_NAME)); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } try { Console.WriteLine("\nGet all wireless profiles:"); Console.WriteLine("==========================\n"); List profiles; // Get all wireless profiles. amt.Config.Wireless.GetProfiles(out profiles); // Print the profiles list. Console.WriteLine("\nProfile list:"); foreach (Profile profile in profiles) { PrintProfile(profile); } } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void DeleteWirelessProfiles() { try { Console.WriteLine("\nDelete wireless profile \"" + ADMIN_PROFILE_NAME + "\":"); Console.WriteLine("=================================================\n"); // Delete admin profile by name. amt.Config.Wireless.DeleteAdminProfile(ADMIN_PROFILE_NAME); Console.WriteLine("Delete wireless profile completed successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } try { Console.WriteLine("\nDelete all wireless admin profiles:"); Console.WriteLine("===================================\n"); // Delete all admin profiles. (Regular admin profile and 1.xs profile.) amt.Config.Wireless.DeleteProfiles(ProfileTypes.AllAdminProfiles); Console.WriteLine("Delete all admin wireless profiles completed successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void GetUserProfileSync() { try { Console.WriteLine("\nGet user profile synchronization state:"); Console.WriteLine("=======================================\n"); // Get profile synchronization state. ProfileSynchronization profileSync = amt.Config.Wireless.GetUserProfileSync(); // Print profile synchronization state. Console.WriteLine("Local profile synchronization is {0}.", (profileSync == ProfileSynchronization.Disable?"disable":"enable")); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void SetUserProfileSync(ProfileSynchronization synchronize) { try { Console.WriteLine("\nSet user profile synchronization state:"); Console.WriteLine("=======================================\n"); // Set profile synchronization state. amt.Config.Wireless.SetUserProfileSync(synchronize); Console.WriteLine((synchronize == ProfileSynchronization.Disable? "Disable":"Enable user") + " profile synchronization completed successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void GetLinkProperties() { try { Console.WriteLine("\nGet link properties:"); Console.WriteLine("=====================\n"); // Get the link preference. LinkType linkPreference = amt.Config.Wireless.GetLinkPreference(); // Print link preference. Console.WriteLine("The link control is preferred to be owned by " + linkPreference.ToString()); // Get the actual link owner. LinkType linkOwner = amt.Config.Wireless.GetLinkOwner(); // Print the actual link owner. Console.WriteLine("Currently, the link control is owned by " + linkOwner.ToString()); // Get automatic link transition state. AutoLinkTransType link = amt.Config.Wireless.GetAutoLinkTransitionState(); Console.WriteLine("Automatic link transition state is: " + link); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void SetLinkPreference() { try { Console.WriteLine("\nSet link preference:"); Console.WriteLine("====================\n"); // Set link preference to ME. The timeout will be 60 sec. amt.Config.Wireless.SetLinkPreferenceToMe(60); Console.WriteLine("Set link preference to ME completed successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } public void PauseAutoLinkTransition() { try { Console.WriteLine("\nSet automatic link transition state:"); Console.WriteLine("====================================\n"); // Pause automatic link transition for an one hour. amt.Config.Wireless.SetAutoLinkTransitionState(false); Console.WriteLine("Resume automatic link transition completed successfully."); } catch (WirelessManageabilityException ex) { Console.WriteLine(ex.Message); } } #endregion #region Private Static Functions private static void PrintProfile(Profile profile) { if (profile != null) { // Check profile type, and send the profile to the appropiate print function if (profile is UserProfile) PrintProfile((UserProfile)profile); else if (profile is AdminProfile) PrintProfile((AdminProfile)profile); else PrintProfile((Admin1XProfile)profile); } } private static void PrintProfile(UserProfile userProfile) { Console.WriteLine("\n=====================================================================\n"); Console.WriteLine("Profile Name: {0}", userProfile.ProfileName); } private static void PrintProfile(AdminProfile adminProfile) { Console.WriteLine("\n=====================================================================\n"); Console.WriteLine("Profile Name: {0}", adminProfile.ProfileName); Console.WriteLine("SSID: {0}", (string.IsNullOrEmpty(adminProfile.SSID) ? "Null" : adminProfile.SSID)); Console.WriteLine("Authentication Method: {0}", adminProfile.AuthenticationMethod); Console.WriteLine("Encryption Method: {0}", adminProfile.EncryptionMethod); Console.WriteLine("Is primary: {0}", Convert.ToString(adminProfile.IsPrimary)); } private static void PrintProfile(Admin1XProfile admin802_1xProfile) { Console.WriteLine("\n=====================================================================\n"); Console.WriteLine("Profile Name: {0}", admin802_1xProfile.ProfileName); Console.WriteLine("SSID: {0}", (string.IsNullOrEmpty(admin802_1xProfile.SSID) ? "Null" : admin802_1xProfile.SSID)); Console.WriteLine("Is Primary: {0}", admin802_1xProfile.IsPrimary); Console.WriteLine("Authentication Method: {0}", admin802_1xProfile.AuthenticationMethod); Console.WriteLine("Encryption Method: {0}", admin802_1xProfile.EncryptionMethod); Console.WriteLine("Authentication Protocol: {0}", admin802_1xProfile.AuthenticationProtocol); if (!string.IsNullOrEmpty(admin802_1xProfile.CACertificate.ServerCertificateName)) { Console.WriteLine("Server Sertificate {0}: {1}", (admin802_1xProfile.CACertificate.ServerCertificateNameComparison == ServerCertificateNamesComparison.DomainSuffix ? "Domain" : "Name"), admin802_1xProfile.CACertificate.ServerCertificateName); } Console.WriteLine("Roaming Identify: {0}", (string.IsNullOrEmpty(admin802_1xProfile.RoamingIdentity)?"Null":admin802_1xProfile.RoamingIdentity)); if (!string.IsNullOrEmpty(admin802_1xProfile.UserCredential.UserName)) { Console.WriteLine("Intel AMT User Name: {0}", (string.IsNullOrEmpty(admin802_1xProfile.UserCredential.UserName) ? "Null" : admin802_1xProfile.UserCredential.UserName)); Console.WriteLine("Intel AMT Domain: {0}", (string.IsNullOrEmpty(admin802_1xProfile.UserCredential.Domain) ? "Null" : admin802_1xProfile.UserCredential.Domain)); } } private static byte[] ConvertStringToByteArray(string s) { char[] cArr = s.ToCharArray(); byte[] bArr = new byte[cArr.Length]; for (int i = 0; i < cArr.Length; i++) { bArr[i] = Convert.ToByte(cArr[i]); } return bArr; } #endregion } }