Home | History | Annotate | Download | only in net
      1 //
      2 // Copyright (C) 2012 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #ifndef SHILL_NET_NL80211_ATTRIBUTE_H_
     18 #define SHILL_NET_NL80211_ATTRIBUTE_H_
     19 
     20 #include <string>
     21 
     22 #include <base/macros.h>
     23 
     24 #include "shill/net/netlink_attribute.h"
     25 #include "shill/net/netlink_message.h"
     26 
     27 struct nlattr;
     28 
     29 namespace shill {
     30 
     31 // U8.
     32 
     33 class Nl80211AttributeDfsRegion : public NetlinkU8Attribute {
     34  public:
     35   static const int kName;
     36   static const char kNameString[];
     37   Nl80211AttributeDfsRegion() : NetlinkU8Attribute(kName, kNameString) {}
     38 
     39  private:
     40   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDfsRegion);
     41 };
     42 
     43 class Nl80211AttributeKeyIdx : public NetlinkU8Attribute {
     44  public:
     45   static const int kName;
     46   static const char kNameString[];
     47   Nl80211AttributeKeyIdx() : NetlinkU8Attribute(kName, kNameString) {}
     48 
     49  private:
     50   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeKeyIdx);
     51 };
     52 
     53 class Nl80211AttributeMaxMatchSets : public NetlinkU8Attribute {
     54  public:
     55   static const int kName;
     56   static const char kNameString[];
     57   Nl80211AttributeMaxMatchSets() : NetlinkU8Attribute(kName, kNameString) {}
     58 
     59  private:
     60   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxMatchSets);
     61 };
     62 
     63 class Nl80211AttributeMaxNumPmkids : public NetlinkU8Attribute {
     64  public:
     65   static const int kName;
     66   static const char kNameString[];
     67   Nl80211AttributeMaxNumPmkids() : NetlinkU8Attribute(kName, kNameString) {}
     68 
     69  private:
     70   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxNumPmkids);
     71 };
     72 
     73 class Nl80211AttributeMaxNumScanSsids : public NetlinkU8Attribute {
     74  public:
     75   static const int kName;
     76   static const char kNameString[];
     77   Nl80211AttributeMaxNumScanSsids() : NetlinkU8Attribute(kName, kNameString) {}
     78 
     79  private:
     80   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxNumScanSsids);
     81 };
     82 
     83 class Nl80211AttributeMaxNumSchedScanSsids : public NetlinkU8Attribute {
     84  public:
     85   static const int kName;
     86   static const char kNameString[];
     87   Nl80211AttributeMaxNumSchedScanSsids()
     88       : NetlinkU8Attribute(kName, kNameString) {}
     89 
     90  private:
     91   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxNumSchedScanSsids);
     92 };
     93 
     94 class Nl80211AttributeRegType : public NetlinkU8Attribute {
     95  public:
     96   static const int kName;
     97   static const char kNameString[];
     98   Nl80211AttributeRegType() : NetlinkU8Attribute(kName, kNameString) {}
     99 
    100  private:
    101   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegType);
    102 };
    103 
    104 class Nl80211AttributeWiphyCoverageClass : public NetlinkU8Attribute {
    105  public:
    106   static const int kName;
    107   static const char kNameString[];
    108   Nl80211AttributeWiphyCoverageClass()
    109       : NetlinkU8Attribute(kName, kNameString) {}
    110 
    111  private:
    112   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyCoverageClass);
    113 };
    114 
    115 class Nl80211AttributeWiphyRetryLong : public NetlinkU8Attribute {
    116  public:
    117   static const int kName;
    118   static const char kNameString[];
    119   Nl80211AttributeWiphyRetryLong() : NetlinkU8Attribute(kName, kNameString) {}
    120 
    121  private:
    122   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyRetryLong);
    123 };
    124 
    125 class Nl80211AttributeWiphyRetryShort : public NetlinkU8Attribute {
    126  public:
    127   static const int kName;
    128   static const char kNameString[];
    129   Nl80211AttributeWiphyRetryShort() : NetlinkU8Attribute(kName, kNameString) {}
    130 
    131  private:
    132   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyRetryShort);
    133 };
    134 
    135 // U16.
    136 
    137 class Nl80211AttributeMaxScanIeLen : public NetlinkU16Attribute {
    138  public:
    139   static const int kName;
    140   static const char kNameString[];
    141   Nl80211AttributeMaxScanIeLen() : NetlinkU16Attribute(kName, kNameString) {}
    142 
    143  private:
    144   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxScanIeLen);
    145 };
    146 
    147 class Nl80211AttributeMaxSchedScanIeLen : public NetlinkU16Attribute {
    148  public:
    149   static const int kName;
    150   static const char kNameString[];
    151   Nl80211AttributeMaxSchedScanIeLen()
    152       : NetlinkU16Attribute(kName, kNameString) {}
    153 
    154  private:
    155   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxSchedScanIeLen);
    156 };
    157 
    158 class Nl80211AttributeReasonCode : public NetlinkU16Attribute {
    159  public:
    160   static const int kName;
    161   static const char kNameString[];
    162   Nl80211AttributeReasonCode() : NetlinkU16Attribute(kName, kNameString) {}
    163 
    164  private:
    165   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeReasonCode);
    166 };
    167 
    168 class Nl80211AttributeStatusCode : public NetlinkU16Attribute {
    169  public:
    170   static const int kName;
    171   static const char kNameString[];
    172   Nl80211AttributeStatusCode() : NetlinkU16Attribute(kName, kNameString) {}
    173 
    174  private:
    175   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeStatusCode);
    176 };
    177 
    178 // U32.
    179 
    180 class Nl80211AttributeDuration : public NetlinkU32Attribute {
    181  public:
    182   static const int kName;
    183   static const char kNameString[];
    184   Nl80211AttributeDuration() : NetlinkU32Attribute(kName, kNameString) {}
    185 
    186  private:
    187   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDuration);
    188 };
    189 
    190 class Nl80211AttributeDeviceApSme : public NetlinkU32Attribute {
    191  public:
    192   static const int kName;
    193   static const char kNameString[];
    194   Nl80211AttributeDeviceApSme() : NetlinkU32Attribute(kName, kNameString) {}
    195 
    196  private:
    197   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDeviceApSme);
    198 };
    199 
    200 class Nl80211AttributeFeatureFlags : public NetlinkU32Attribute {
    201  public:
    202   static const int kName;
    203   static const char kNameString[];
    204   Nl80211AttributeFeatureFlags() : NetlinkU32Attribute(kName, kNameString) {}
    205 
    206  private:
    207   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeFeatureFlags);
    208 };
    209 
    210 class Nl80211AttributeGeneration : public NetlinkU32Attribute {
    211  public:
    212   static const int kName;
    213   static const char kNameString[];
    214   Nl80211AttributeGeneration() : NetlinkU32Attribute(kName, kNameString) {}
    215 
    216  private:
    217   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeGeneration);
    218 };
    219 
    220 class Nl80211AttributeIfindex : public NetlinkU32Attribute {
    221  public:
    222   static const int kName;
    223   static const char kNameString[];
    224   Nl80211AttributeIfindex() : NetlinkU32Attribute(kName, kNameString) {}
    225 
    226  private:
    227   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeIfindex);
    228 };
    229 
    230 class Nl80211AttributeIftype : public NetlinkU32Attribute {
    231  public:
    232   static const int kName;
    233   static const char kNameString[];
    234   Nl80211AttributeIftype() : NetlinkU32Attribute(kName, kNameString) {}
    235 
    236  private:
    237   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeIftype);
    238 };
    239 
    240 class Nl80211AttributeKeyType : public NetlinkU32Attribute {
    241  public:
    242   static const int kName;
    243   static const char kNameString[];
    244   Nl80211AttributeKeyType() : NetlinkU32Attribute(kName, kNameString) {}
    245 
    246  private:
    247   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeKeyType);
    248 };
    249 
    250 class Nl80211AttributeMaxRemainOnChannelDuration : public NetlinkU32Attribute {
    251  public:
    252   static const int kName;
    253   static const char kNameString[];
    254   Nl80211AttributeMaxRemainOnChannelDuration()
    255       : NetlinkU32Attribute(kName, kNameString) {}
    256 
    257  private:
    258   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMaxRemainOnChannelDuration);
    259 };
    260 
    261 class Nl80211AttributeProbeRespOffload : public NetlinkU32Attribute {
    262  public:
    263   static const int kName;
    264   static const char kNameString[];
    265   Nl80211AttributeProbeRespOffload()
    266       : NetlinkU32Attribute(kName, kNameString) {}
    267 
    268  private:
    269   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeProbeRespOffload);
    270 };
    271 
    272 // Set SHILL_EXPORT to allow unit tests to instantiate these.
    273 class SHILL_EXPORT Nl80211AttributeRegInitiator : public NetlinkU32Attribute {
    274  public:
    275   static const int kName;
    276   static const char kNameString[];
    277   Nl80211AttributeRegInitiator() : NetlinkU32Attribute(kName, kNameString) {}
    278   bool InitFromValue(const ByteString& data) override;
    279 
    280  private:
    281   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegInitiator);
    282 };
    283 
    284 class Nl80211AttributeWiphy : public NetlinkU32Attribute {
    285  public:
    286   static const int kName;
    287   static const char kNameString[];
    288   Nl80211AttributeWiphy() : NetlinkU32Attribute(kName, kNameString) {}
    289 
    290  private:
    291   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphy);
    292 };
    293 
    294 class Nl80211AttributeWiphyAntennaAvailRx : public NetlinkU32Attribute {
    295  public:
    296   static const int kName;
    297   static const char kNameString[];
    298   Nl80211AttributeWiphyAntennaAvailRx()
    299       : NetlinkU32Attribute(kName, kNameString) {}
    300 
    301  private:
    302   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaAvailRx);
    303 };
    304 
    305 class Nl80211AttributeWiphyAntennaAvailTx : public NetlinkU32Attribute {
    306  public:
    307   static const int kName;
    308   static const char kNameString[];
    309   Nl80211AttributeWiphyAntennaAvailTx()
    310       : NetlinkU32Attribute(kName, kNameString) {}
    311 
    312  private:
    313   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaAvailTx);
    314 };
    315 
    316 class Nl80211AttributeWiphyAntennaRx : public NetlinkU32Attribute {
    317  public:
    318   static const int kName;
    319   static const char kNameString[];
    320   Nl80211AttributeWiphyAntennaRx() : NetlinkU32Attribute(kName, kNameString) {}
    321 
    322  private:
    323   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaRx);
    324 };
    325 
    326 class Nl80211AttributeWiphyAntennaTx : public NetlinkU32Attribute {
    327  public:
    328   static const int kName;
    329   static const char kNameString[];
    330   Nl80211AttributeWiphyAntennaTx() : NetlinkU32Attribute(kName, kNameString) {}
    331 
    332  private:
    333   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyAntennaTx);
    334 };
    335 
    336 class Nl80211AttributeWiphyFragThreshold : public NetlinkU32Attribute {
    337  public:
    338   static const int kName;
    339   static const char kNameString[];
    340   Nl80211AttributeWiphyFragThreshold()
    341       : NetlinkU32Attribute(kName, kNameString) {}
    342 
    343  private:
    344   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyFragThreshold);
    345 };
    346 
    347 class Nl80211AttributeWiphyFreq : public NetlinkU32Attribute {
    348  public:
    349   static const int kName;
    350   static const char kNameString[];
    351   Nl80211AttributeWiphyFreq() : NetlinkU32Attribute(kName, kNameString) {}
    352 
    353  private:
    354   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyFreq);
    355 };
    356 
    357 class Nl80211AttributeChannelType : public NetlinkU32Attribute {
    358  public:
    359   static const int kName;
    360   static const char kNameString[];
    361   Nl80211AttributeChannelType() : NetlinkU32Attribute(kName, kNameString) {}
    362 
    363  private:
    364   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeChannelType);
    365 };
    366 
    367 class Nl80211AttributeChannelWidth : public NetlinkU32Attribute {
    368  public:
    369   static const int kName;
    370   static const char kNameString[];
    371   Nl80211AttributeChannelWidth() : NetlinkU32Attribute(kName, kNameString) {}
    372 
    373  private:
    374   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeChannelWidth);
    375 };
    376 
    377 class Nl80211AttributeCenterFreq1 : public NetlinkU32Attribute {
    378  public:
    379   static const int kName;
    380   static const char kNameString[];
    381   Nl80211AttributeCenterFreq1() : NetlinkU32Attribute(kName, kNameString) {}
    382 
    383  private:
    384   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCenterFreq1);
    385 };
    386 
    387 class Nl80211AttributeCenterFreq2 : public NetlinkU32Attribute {
    388  public:
    389   static const int kName;
    390   static const char kNameString[];
    391   Nl80211AttributeCenterFreq2() : NetlinkU32Attribute(kName, kNameString) {}
    392 
    393  private:
    394   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCenterFreq2);
    395 };
    396 
    397 class Nl80211AttributeWiphyRtsThreshold : public NetlinkU32Attribute {
    398  public:
    399   static const int kName;
    400   static const char kNameString[];
    401   Nl80211AttributeWiphyRtsThreshold()
    402       : NetlinkU32Attribute(kName, kNameString) {}
    403 
    404  private:
    405   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyRtsThreshold);
    406 };
    407 
    408 // U64.
    409 
    410 class Nl80211AttributeCookie : public NetlinkU64Attribute {
    411  public:
    412   static const int kName;
    413   static const char kNameString[];
    414   Nl80211AttributeCookie() : NetlinkU64Attribute(kName, kNameString) {}
    415 
    416  private:
    417   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCookie);
    418 };
    419 
    420 // Flag.
    421 
    422 class Nl80211AttributeControlPortEthertype : public NetlinkFlagAttribute {
    423  public:
    424   static const int kName;
    425   static const char kNameString[];
    426   Nl80211AttributeControlPortEthertype()
    427       : NetlinkFlagAttribute(kName, kNameString) {}
    428 
    429  private:
    430   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeControlPortEthertype);
    431 };
    432 
    433 class Nl80211AttributeDisconnectedByAp : public NetlinkFlagAttribute {
    434  public:
    435   static const int kName;
    436   static const char kNameString[];
    437   Nl80211AttributeDisconnectedByAp() :
    438     NetlinkFlagAttribute(kName, kNameString) {}
    439 
    440  private:
    441   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeDisconnectedByAp);
    442 };
    443 
    444 class Nl80211AttributeOffchannelTxOk : public NetlinkFlagAttribute {
    445  public:
    446   static const int kName;
    447   static const char kNameString[];
    448   Nl80211AttributeOffchannelTxOk()
    449       : NetlinkFlagAttribute(kName, kNameString) {}
    450 
    451  private:
    452   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeOffchannelTxOk);
    453 };
    454 
    455 class Nl80211AttributeRoamSupport : public NetlinkFlagAttribute {
    456  public:
    457   static const int kName;
    458   static const char kNameString[];
    459   Nl80211AttributeRoamSupport() : NetlinkFlagAttribute(kName, kNameString) {}
    460 
    461  private:
    462   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRoamSupport);
    463 };
    464 
    465 class Nl80211AttributeSupportApUapsd : public NetlinkFlagAttribute {
    466  public:
    467   static const int kName;
    468   static const char kNameString[];
    469   Nl80211AttributeSupportApUapsd()
    470       : NetlinkFlagAttribute(kName, kNameString) {}
    471 
    472  private:
    473   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportApUapsd);
    474 };
    475 
    476 class Nl80211AttributeSupportIbssRsn : public NetlinkFlagAttribute {
    477  public:
    478   static const int kName;
    479   static const char kNameString[];
    480   Nl80211AttributeSupportIbssRsn()
    481       : NetlinkFlagAttribute(kName, kNameString) {}
    482 
    483  private:
    484   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportIbssRsn);
    485 };
    486 
    487 class Nl80211AttributeSupportMeshAuth : public NetlinkFlagAttribute {
    488  public:
    489   static const int kName;
    490   static const char kNameString[];
    491   Nl80211AttributeSupportMeshAuth() :
    492     NetlinkFlagAttribute(kName, kNameString) {}
    493 
    494  private:
    495   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportMeshAuth);
    496 };
    497 
    498 class Nl80211AttributeTdlsExternalSetup : public NetlinkFlagAttribute {
    499  public:
    500   static const int kName;
    501   static const char kNameString[];
    502   Nl80211AttributeTdlsExternalSetup()
    503       : NetlinkFlagAttribute(kName, kNameString) {}
    504 
    505  private:
    506   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeTdlsExternalSetup);
    507 };
    508 
    509 class Nl80211AttributeTdlsSupport : public NetlinkFlagAttribute {
    510  public:
    511   static const int kName;
    512   static const char kNameString[];
    513   Nl80211AttributeTdlsSupport() : NetlinkFlagAttribute(kName, kNameString) {}
    514 
    515  private:
    516   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeTdlsSupport);
    517 };
    518 
    519 class Nl80211AttributeTimedOut : public NetlinkFlagAttribute {
    520  public:
    521   static const int kName;
    522   static const char kNameString[];
    523   Nl80211AttributeTimedOut() : NetlinkFlagAttribute(kName, kNameString) {}
    524 
    525  private:
    526   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeTimedOut);
    527 };
    528 
    529 // String.
    530 
    531 class Nl80211AttributeRegAlpha2 : public NetlinkStringAttribute {
    532  public:
    533   static const int kName;
    534   static const char kNameString[];
    535   Nl80211AttributeRegAlpha2() : NetlinkStringAttribute(kName, kNameString) {}
    536 
    537  private:
    538   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegAlpha2);
    539 };
    540 
    541 class Nl80211AttributeWiphyName : public NetlinkStringAttribute {
    542  public:
    543   static const int kName;
    544   static const char kNameString[];
    545   Nl80211AttributeWiphyName() : NetlinkStringAttribute(kName, kNameString) {}
    546 
    547  private:
    548   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyName);
    549 };
    550 
    551 // Nested.
    552 
    553 class Nl80211AttributeBss : public NetlinkNestedAttribute {
    554  public:
    555   static const int kName;
    556   static const char kNameString[];
    557   // These are sorted alphabetically.
    558   static const int kChallengeTextAttributeId;
    559   static const int kChannelsAttributeId;
    560   static const int kCountryInfoAttributeId;
    561   static const int kDSParameterSetAttributeId;
    562   static const int kErpAttributeId;
    563   static const int kExtendedRatesAttributeId;
    564   static const int kHtCapAttributeId;
    565   static const int kHtInfoAttributeId;
    566   static const int kPowerCapabilityAttributeId;
    567   static const int kPowerConstraintAttributeId;
    568   static const int kRequestAttributeId;
    569   static const int kRsnAttributeId;
    570   static const int kSsidAttributeId;
    571   static const int kSupportedRatesAttributeId;
    572   static const int kTpcReportAttributeId;
    573   static const int kVendorSpecificAttributeId;
    574   static const int kVhtCapAttributeId;
    575   static const int kVhtInfoAttributeId;
    576 
    577   Nl80211AttributeBss();
    578 
    579  private:
    580   static bool ParseInformationElements(AttributeList* attribute_list,
    581                                        size_t id,
    582                                        const std::string& attribute_name,
    583                                        ByteString data);
    584 
    585   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeBss);
    586 };
    587 
    588 class Nl80211AttributeCqm : public NetlinkNestedAttribute {
    589  public:
    590   static const int kName;
    591   static const char kNameString[];
    592   Nl80211AttributeCqm();
    593 
    594  private:
    595   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCqm);
    596 };
    597 
    598 class Nl80211AttributeRegRules : public NetlinkNestedAttribute {
    599  public:
    600   static const int kName;
    601   static const char kNameString[];
    602   Nl80211AttributeRegRules();
    603 
    604  private:
    605   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRegRules);
    606 };
    607 
    608 class Nl80211AttributeScanFrequencies : public NetlinkNestedAttribute {
    609  public:
    610   static const int kName;
    611   static const char kNameString[];
    612   Nl80211AttributeScanFrequencies();
    613 
    614  private:
    615   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeScanFrequencies);
    616 };
    617 
    618 class Nl80211AttributeScanSsids : public NetlinkNestedAttribute {
    619  public:
    620   static const int kName;
    621   static const char kNameString[];
    622   Nl80211AttributeScanSsids();
    623 
    624  private:
    625   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeScanSsids);
    626 };
    627 
    628 class Nl80211AttributeStaInfo : public NetlinkNestedAttribute {
    629  public:
    630   static const int kName;
    631   static const char kNameString[];
    632   Nl80211AttributeStaInfo();
    633 
    634  private:
    635   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeStaInfo);
    636 };
    637 
    638 class Nl80211AttributeSupportedIftypes : public NetlinkNestedAttribute {
    639  public:
    640   static const int kName;
    641   static const char kNameString[];
    642   Nl80211AttributeSupportedIftypes();
    643 
    644  private:
    645   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSupportedIftypes);
    646 };
    647 
    648 class Nl80211AttributeWiphyBands : public NetlinkNestedAttribute {
    649  public:
    650   static const int kName;
    651   static const char kNameString[];
    652   Nl80211AttributeWiphyBands();
    653 
    654  private:
    655   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWiphyBands);
    656 };
    657 
    658 #if !defined(DISABLE_WAKE_ON_WIFI)
    659 class Nl80211AttributeWowlanTriggers : public NetlinkNestedAttribute {
    660  public:
    661   static const int kName;
    662   static const char kNameString[];
    663   explicit Nl80211AttributeWowlanTriggers(
    664       NetlinkMessage::MessageContext context);
    665 
    666  private:
    667   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWowlanTriggers);
    668 };
    669 
    670 class Nl80211AttributeWowlanTriggersSupported : public NetlinkNestedAttribute {
    671  public:
    672   static const int kName;
    673   static const char kNameString[];
    674   Nl80211AttributeWowlanTriggersSupported();
    675 
    676  private:
    677   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeWowlanTriggersSupported);
    678 };
    679 #endif  // DISABLE_WAKE_ON_WIFI
    680 
    681 // Raw.
    682 
    683 class Nl80211AttributeCipherSuites : public NetlinkRawAttribute {
    684  public:
    685   static const int kName;
    686   static const char kNameString[];
    687   Nl80211AttributeCipherSuites() : NetlinkRawAttribute(kName, kNameString) {}
    688 
    689  private:
    690   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeCipherSuites);
    691 };
    692 
    693 class Nl80211AttributeFrame : public NetlinkRawAttribute {
    694  public:
    695   static const int kName;
    696   static const char kNameString[];
    697   Nl80211AttributeFrame() : NetlinkRawAttribute(kName, kNameString) {}
    698 
    699  private:
    700   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeFrame);
    701 };
    702 
    703 class Nl80211AttributeHtCapabilityMask : public NetlinkRawAttribute {
    704  public:
    705   static const int kName;
    706   static const char kNameString[];
    707   Nl80211AttributeHtCapabilityMask()
    708       : NetlinkRawAttribute(kName, kNameString) {}
    709 
    710  private:
    711   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeHtCapabilityMask);
    712 };
    713 
    714 class Nl80211AttributeKeySeq : public NetlinkRawAttribute {
    715  public:
    716   static const int kName;
    717   static const char kNameString[];
    718   Nl80211AttributeKeySeq() : NetlinkRawAttribute(kName, kNameString) {}
    719 
    720  private:
    721   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeKeySeq);
    722 };
    723 
    724 class Nl80211AttributeMac : public NetlinkRawAttribute {
    725  public:
    726   static const int kName;
    727   static const char kNameString[];
    728   Nl80211AttributeMac() : NetlinkRawAttribute(kName, kNameString) {}
    729   virtual bool ToString(std::string* value) const;
    730 
    731   // Stringizes the MAC address found in 'arg'.  If there are problems (such
    732   // as a NULL |arg|), |value| is set to a bogus MAC address.
    733   static std::string StringFromMacAddress(const uint8_t* arg);
    734 
    735  private:
    736   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeMac);
    737 };
    738 
    739 class Nl80211AttributeRespIe : public NetlinkRawAttribute {
    740  public:
    741   static const int kName;
    742   static const char kNameString[];
    743   Nl80211AttributeRespIe() : NetlinkRawAttribute(kName, kNameString) {}
    744 
    745  private:
    746   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeRespIe);
    747 };
    748 
    749 class Nl80211AttributeSurveyInfo : public NetlinkNestedAttribute {
    750  public:
    751   static const int kName;
    752   static const char kNameString[];
    753   Nl80211AttributeSurveyInfo();
    754 
    755  private:
    756   DISALLOW_COPY_AND_ASSIGN(Nl80211AttributeSurveyInfo);
    757 };
    758 
    759 }  // namespace shill
    760 
    761 #endif  // SHILL_NET_NL80211_ATTRIBUTE_H_
    762