450 lines
18 KiB
C#
450 lines
18 KiB
C#
//----------------------------------------------------------------------------
|
|
//
|
|
// 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<Profile> 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
|
|
}
|
|
}
|