// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_NL80211_ATTRIBUTE_H_
#define SHILL_NL80211_ATTRIBUTE_H_

#include <netlink/attr.h>

#include <string>

#include <base/macros.h>

#include "shill/netlink_attribute.h"

struct nlattr;

namespace shill {

// U8.

class Nl80211AttributeKeyIdx : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeKeyIdx() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeKeyIdx);
};

class Nl80211AttributeMaxMatchSets : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxMatchSets() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxMatchSets);
};

class Nl80211AttributeMaxNumPmkids : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxNumPmkids() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxNumPmkids);
};

class Nl80211AttributeMaxNumScanSsids : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxNumScanSsids() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxNumScanSsids);
};

class Nl80211AttributeMaxNumSchedScanSsids : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxNumSchedScanSsids()
      : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxNumSchedScanSsids);
};

class Nl80211AttributeRegType : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeRegType() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegType);
};

class Nl80211AttributeWiphyCoverageClass : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyCoverageClass()
      : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyCoverageClass);
};

class Nl80211AttributeWiphyRetryLong : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyRetryLong() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyRetryLong);
};

class Nl80211AttributeWiphyRetryShort : public NetlinkU8Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyRetryShort() : NetlinkU8Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyRetryShort);
};

// U16.

class Nl80211AttributeMaxScanIeLen : public NetlinkU16Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxScanIeLen() : NetlinkU16Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxScanIeLen);
};

class Nl80211AttributeMaxSchedScanIeLen : public NetlinkU16Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxSchedScanIeLen()
      : NetlinkU16Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxSchedScanIeLen);
};

class Nl80211AttributeReasonCode : public NetlinkU16Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeReasonCode() : NetlinkU16Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeReasonCode);
};

class Nl80211AttributeStatusCode : public NetlinkU16Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeStatusCode() : NetlinkU16Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeStatusCode);
};

// U32.

class Nl80211AttributeDuration : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeDuration() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDuration);
};

class Nl80211AttributeDeviceApSme : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeDeviceApSme() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDeviceApSme);
};

class Nl80211AttributeFeatureFlags : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeFeatureFlags() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeFeatureFlags);
};

class Nl80211AttributeGeneration : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeGeneration() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeGeneration);
};

class Nl80211AttributeIfindex : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeIfindex() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeIfindex);
};

class Nl80211AttributeIftype : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeIftype() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeIftype);
};

class Nl80211AttributeKeyType : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeKeyType() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeKeyType);
};

class Nl80211AttributeMaxRemainOnChannelDuration : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMaxRemainOnChannelDuration()
      : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxRemainOnChannelDuration);
};

class Nl80211AttributeProbeRespOffload : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeProbeRespOffload()
      : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeProbeRespOffload);
};

class Nl80211AttributeRegInitiator : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeRegInitiator() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegInitiator);
};

class Nl80211AttributeWiphy : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphy() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphy);
};

class Nl80211AttributeWiphyAntennaAvailRx : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyAntennaAvailRx()
      : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaAvailRx);
};

class Nl80211AttributeWiphyAntennaAvailTx : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyAntennaAvailTx()
      : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaAvailTx);
};

class Nl80211AttributeWiphyAntennaRx : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyAntennaRx() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaRx);
};

class Nl80211AttributeWiphyAntennaTx : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyAntennaTx() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaTx);
};

class Nl80211AttributeWiphyFragThreshold : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyFragThreshold()
      : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyFragThreshold);
};

class Nl80211AttributeWiphyFreq : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyFreq() : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyFreq);
};

class Nl80211AttributeWiphyRtsThreshold : public NetlinkU32Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyRtsThreshold()
      : NetlinkU32Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyRtsThreshold);
};

// U64.

class Nl80211AttributeCookie : public NetlinkU64Attribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeCookie() : NetlinkU64Attribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCookie);
};

// Flag.

class Nl80211AttributeControlPortEthertype : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeControlPortEthertype()
      : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeControlPortEthertype);
};

class Nl80211AttributeDisconnectedByAp : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeDisconnectedByAp() :
    NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDisconnectedByAp);
};

class Nl80211AttributeOffchannelTxOk : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeOffchannelTxOk()
      : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeOffchannelTxOk);
};

class Nl80211AttributeRoamSupport : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeRoamSupport() : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRoamSupport);
};

class Nl80211AttributeSupportApUapsd : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeSupportApUapsd()
      : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportApUapsd);
};

class Nl80211AttributeSupportIbssRsn : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeSupportIbssRsn()
      : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportIbssRsn);
};

class Nl80211AttributeSupportMeshAuth : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeSupportMeshAuth() :
    NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportMeshAuth);
};

class Nl80211AttributeTdlsExternalSetup : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeTdlsExternalSetup()
      : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeTdlsExternalSetup);
};

class Nl80211AttributeTdlsSupport : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeTdlsSupport() : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeTdlsSupport);
};

class Nl80211AttributeTimedOut : public NetlinkFlagAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeTimedOut() : NetlinkFlagAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeTimedOut);
};

// String.

class Nl80211AttributeRegAlpha2 : public NetlinkStringAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeRegAlpha2() : NetlinkStringAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegAlpha2);
};

class Nl80211AttributeWiphyName : public NetlinkStringAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyName() : NetlinkStringAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyName);
};

// Nested.

class Nl80211AttributeBss : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  // These are sorted alphabetically.
  static const int kChallengeTextAttributeId;
  static const int kChannelsAttributeId;
  static const int kCountryInfoAttributeId;
  static const int kDSParameterSetAttributeId;
  static const int kErpAttributeId;
  static const int kExtendedRatesAttributeId;
  static const int kHtCapAttributeId;
  static const int kHtInfoAttributeId;
  static const int kPowerCapabilityAttributeId;
  static const int kPowerConstraintAttributeId;
  static const int kRequestAttributeId;
  static const int kRsnAttributeId;
  static const int kSsidAttributeId;
  static const int kSupportedRatesAttributeId;
  static const int kTcpReportAttributeId;
  static const int kVendorSpecificAttributeId;

  Nl80211AttributeBss();

 private:
  static bool ParseInformationElements(AttributeList *attribute_list,
                                       size_t id,
                                       const std::string &attribute_name,
                                       ByteString data);

  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeBss);
};

class Nl80211AttributeCqm : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeCqm();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCqm);
};

class Nl80211AttributeScanFrequencies : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeScanFrequencies();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeScanFrequencies);
};

class Nl80211AttributeScanSsids : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeScanSsids();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeScanSsids);
};

class Nl80211AttributeStaInfo : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeStaInfo();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeStaInfo);
};

class Nl80211AttributeWiphyBands : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWiphyBands();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyBands);
};

class Nl80211AttributeWowlanTriggers : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWowlanTriggers();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWowlanTriggers);
};

class Nl80211AttributeWowlanTriggersSupported : public NetlinkNestedAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeWowlanTriggersSupported();

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWowlanTriggersSupported);
};

// Raw.

class Nl80211AttributeCipherSuites : public NetlinkRawAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeCipherSuites() : NetlinkRawAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCipherSuites);
};

class Nl80211AttributeFrame : public NetlinkRawAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeFrame() : NetlinkRawAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeFrame);
};

class Nl80211AttributeHtCapabilityMask : public NetlinkRawAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeHtCapabilityMask()
      : NetlinkRawAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeHtCapabilityMask);
};

class Nl80211AttributeKeySeq : public NetlinkRawAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeKeySeq() : NetlinkRawAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeKeySeq);
};

class Nl80211AttributeMac : public NetlinkRawAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeMac() : NetlinkRawAttribute(kName, kNameString) {}
  virtual bool ToString(std::string *value) const;

  // Stringizes the MAC address found in 'arg'.  If there are problems (such
  // as a NULL |arg|), |value| is set to a bogus MAC address.
  static std::string StringFromMacAddress(const uint8_t *arg);

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMac);
};

class Nl80211AttributeRespIe : public NetlinkRawAttribute {
 public:
  static const int kName;
  static const char kNameString[];
  Nl80211AttributeRespIe() : NetlinkRawAttribute(kName, kNameString) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRespIe);
};

}  // namespace shill

#endif  // SHILL_NL80211_ATTRIBUTE_H_
