617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*******************************************************************************
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Redistribution and use in source and binary forms, with or without
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * modification, are permitted provided that the following conditions are met:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions of source code must retain the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions in binary form must reproduce the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer in the documentation
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * and/or other materials provided with the distribution.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Neither the name of Intel Corp. nor the names of its
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * contributors may be used to endorse or promote products derived from this
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * software without specific prior written permission.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * POSSIBILITY OF SUCH DAMAGE.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *******************************************************************************/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#ifdef HAVE_CONFIG_H
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include "config.h"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#endif
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include "ConfigConnection.h"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include "Lock.h"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganConfigConnection::ConfigConnection(bool verbose) :
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan_initState(ConfigConnection::INIT_STATE_DISCONNECTED),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan_pthiCommand(verbose, 5000),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan_fwulCommand(verbose)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganConfigConnection::~ConfigConnection()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganbool ConfigConnection::IsInitialized()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return ((_initState == INIT_STATE_CONNECTED) ? true : false);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganint ConfigConnection::IsAMTEnabled(bool useOpenPTHI)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan FWU_GET_VERSION_MSG_REPLY verMsg;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan FWU_GET_INFO_MSG_REPLY infoMsg;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan HECI_STATUS heciRet;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan int ret = _CFCON_AMT_UNKNOWN;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (useOpenPTHI) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CODE_VERSIONS ver;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS ast = _pthiCommand.GetCodeVersions(ver);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (PTHI_STATUS_EMPTY_RESPONSE == ast) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return _CFCON_AMT_DISABLED;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (AMT_STATUS_SUCCESS == ast) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return _CFCON_AMT_ENABLED;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return ret;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_fwulCommand.FWULClient.Init()) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan heciRet = _fwulCommand.GetFWUVersionAndInfo(verMsg, infoMsg);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _fwulCommand.FWULClient.Deinit();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (HECI_STATUS_OK == heciRet) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (infoMsg.MessageType == FWU_GET_INFO_REPLY) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return ((MEFWCAPS_MANAGEABILITY_SUPP_AMT
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan == infoMsg.ManageabilityMode)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ? _CFCON_AMT_ENABLED
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan : _CFCON_AMT_DISABLED);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ret = _CFCON_AMT_AT3;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return ret;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganbool ConfigConnection::Init(bool checkEnabled)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_initState == INIT_STATE_CONNECTING) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _initState = INIT_STATE_CONNECTING;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (!(_pthiCommand.PTHIClient.Init(1))) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Deinit();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (checkEnabled) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_CFCON_AMT_ENABLED != IsAMTEnabled(true)) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Deinit();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_initState != INIT_STATE_CONNECTING) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _pthiCommand.PTHIClient.Deinit();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _initState = INIT_STATE_CONNECTED;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return true;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganvoid ConfigConnection::Deinit()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_initState != INIT_STATE_CONNECTING) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _pthiCommand.PTHIClient.Deinit();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _initState = INIT_STATE_DISCONNECTED;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#ifdef _REMOTE_SUPPORT
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS ConfigConnection::RequestEntDNSSuffixList(std::list<std::string> &dnsSuffixList)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock l(_requestLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_initState != INIT_STATE_CONNECTED) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS result = _pthiCommand.GetDNSSuffixList(dnsSuffixList);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (result == AMT_STATUS_INTERNAL_ERROR) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (!_pthiCommand.PTHIClient.IsInitialized()) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _initState = INIT_STATE_DISCONNECTED;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return result;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS ConfigConnection::SendEnterpriseAccess(bool access, ATAddress &localIp)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 hlocalIP[16];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const struct sockaddr *addr = localIp.addr();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock l(_requestLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (_initState != INIT_STATE_CONNECTED) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memset(hlocalIP, 0, sizeof(hlocalIP));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(hlocalIP, addr->sa_data, localIp.size());
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS result = _pthiCommand.SetEnterpriseAccess(
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ((localIp.family() == AF_INET6) ? 1 : 0),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hlocalIP,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ((access) ? 1 : 0));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (result == AMT_STATUS_INTERNAL_ERROR) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Lock il(_initLock);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (!_pthiCommand.PTHIClient.IsInitialized()) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan _initState = INIT_STATE_DISCONNECTED;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return result;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#endif
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan