1N/A/*
1N/A * CDDL HEADER START
1N/A *
1N/A * The contents of this file are subject to the terms of the
1N/A * Common Development and Distribution License (the "License").
1N/A * You may not use this file except in compliance with the License.
1N/A *
1N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1N/A * or http://www.opensolaris.org/os/licensing.
1N/A * See the License for the specific language governing permissions
1N/A * and limitations under the License.
1N/A *
1N/A * When distributing Covered Code, include this CDDL HEADER in each
1N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1N/A * If applicable, add the following below this CDDL HEADER, with the
1N/A * fields enclosed by brackets "[]" replaced with your own identifying
1N/A * information: Portions Copyright [yyyy] [name of copyright owner]
1N/A *
1N/A * CDDL HEADER END
1N/A */
1N/A/*
1N/A * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
1N/A * Use is subject to license terms.
1N/A */
1N/A
1N/A#ifndef _HBAPORT_H
1N/A#define _HBAPORT_H
1N/A
1N/A
1N/A
1N/A#include "Lockable.h"
1N/A#include "HBANPIVPort.h"
1N/A#include <string>
1N/A#include <map>
1N/A#include <vector>
1N/A#include <hbaapi.h>
1N/A#include <hbaapi-sun.h>
1N/A
1N/A/**
1N/A * @memo Represents a single HBA port
1N/A *
1N/A */
1N/Aclass HBAPort : public Lockable {
1N/Apublic:
1N/A HBAPort();
1N/A virtual ~HBAPort() {}
1N/A bool operator==(HBAPort &comp);
1N/A virtual void validatePresent();
1N/A virtual std::string getPath() = 0;
1N/A virtual uint64_t getNodeWWN() = 0;
1N/A virtual uint64_t getPortWWN() = 0;
1N/A virtual HBA_PORTATTRIBUTES getPortAttributes(
1N/A uint64_t &stateChange) = 0;
1N/A virtual HBA_PORTATTRIBUTES getDiscoveredAttributes(
1N/A HBA_UINT32 discoveredport,
1N/A uint64_t &stateChange) = 0;
1N/A virtual HBA_PORTATTRIBUTES getDiscoveredAttributes(
1N/A uint64_t wwn,
1N/A uint64_t &stateChange) = 0;
1N/A virtual void getTargetMappings(
1N/A PHBA_FCPTARGETMAPPINGV2 userMappings) = 0;
1N/A virtual void getRNIDMgmtInfo(PHBA_MGMTINFO info) = 0;
1N/A virtual void sendCTPassThru(void *requestBuffer,
1N/A HBA_UINT32 requestSize,
1N/A void *responseBuffer,
1N/A HBA_UINT32 *responseSize) = 0;
1N/A virtual void sendRLS(uint64_t destWWN,
1N/A void *pRspBuffer,
1N/A HBA_UINT32 *pRspBufferSize) = 0;
1N/A virtual void sendRPL(uint64_t destWWN,
1N/A HBA_UINT32 agent_domain,
1N/A HBA_UINT32 port_index,
1N/A void *pRspBuffer,
1N/A HBA_UINT32 *pRspBufferSize) = 0;
1N/A virtual void sendRPS(uint64_t agentWWN,
1N/A HBA_UINT32 agentDomain,
1N/A uint64_t objectWWN,
1N/A HBA_UINT32 objectPortNum,
1N/A void *pRspBuffer,
1N/A HBA_UINT32 *pRspBufferSize) = 0;
1N/A virtual void sendSRL(uint64_t destWWN,
1N/A HBA_UINT32 agent_domain,
1N/A void *pRspBuffer,
1N/A HBA_UINT32 *pRspBufferSize) = 0;
1N/A virtual void sendLIRR(uint64_t destWWN,
1N/A HBA_UINT8 function,
1N/A HBA_UINT8 type,
1N/A void *pRspBuffer,
1N/A HBA_UINT32 *pRspBufferSize) = 0;
1N/A virtual void sendReportLUNs(uint64_t wwn,
1N/A void *responseBuffer, HBA_UINT32 *responseSize,
1N/A HBA_UINT8 *scsiStatus,
1N/A void *senseBuffer, HBA_UINT32 *senseSize) = 0;
1N/A virtual void sendScsiInquiry(uint64_t wwn, HBA_UINT64 fcLun,
1N/A HBA_UINT8 cdb1, HBA_UINT8 cdb2,
1N/A void *responseBuffer, HBA_UINT32 *responseSize,
HBA_UINT8 *scsiStatus, void *senseBuffer,
HBA_UINT32 *senseSize) = 0;
virtual void sendReadCapacity(uint64_t pwwn,
HBA_UINT64 fcLun, void *responseBuffer,
HBA_UINT32 *responseSize, HBA_UINT8 *scsiStatus,
void *senseBuffer, HBA_UINT32 *senseSize) = 0;
static const int RNID_GENERAL_TOPOLOGY_DATA_FORMAT;
virtual void sendRNID(uint64_t destwwn, HBA_UINT32 destfcid,
HBA_UINT32 nodeIdDataFormat, void *pRspBuffer,
HBA_UINT32 *RspBufferSize) = 0;
virtual void setRNID(HBA_MGMTINFO info) = 0;
static const uint8_t HBA_NPIV_PORT_MAX;
void addPort(HBANPIVPort* port);
HBANPIVPort* getPort(uint64_t wwn);
HBANPIVPort* getPortByIndex(int index);
virtual HBA_PORTNPIVATTRIBUTES getPortNPIVAttributes(
uint64_t &stateChange) = 0;
virtual uint32_t createNPIVPort(
uint64_t vnodewwn,
uint64_t vportwwn,
uint32_t vindex) = 0;
virtual uint32_t deleteNPIVPort(
uint64_t vportwwn) = 0;
protected:
void convertToShortNames(PHBA_FCPTARGETMAPPINGV2 mappings);
std::string lookupControllerPath(std::string path);
std::map<uint64_t, HBANPIVPort*> npivportsByWWN;
std::vector<HBANPIVPort*> npivportsByIndex;
};
#endif /* _HBAPORT_H */