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_TECHNOLOGY_H_
18#define SHILL_TECHNOLOGY_H_
19
20#include <string>
21#include <vector>
22
23namespace shill {
24
25class Error;
26
27// A class that provides functions for converting between technology names
28// and identifiers.
29class Technology {
30 public:
31  enum Identifier {
32    kEthernet,
33    kEthernetEap,
34    kWifi,
35    kWiFiMonitor,
36    kWiMax,
37    kCellular,
38    kVPN,
39    kTunnel,
40    kBlacklisted,
41    kLoopback,
42    kCDCEthernet,  // Only for internal use in DeviceInfo.
43    kVirtioEthernet,  // Only for internal use in DeviceInfo.
44    kNoDeviceSymlink,  // Only for internal use in DeviceInfo.
45    kPPP,
46    kPPPoE,
47    kUnknown,
48  };
49
50  // Returns the technology identifier for a technology name in |name|,
51  // or Technology::kUnknown if the technology name is unknown.
52  static Identifier IdentifierFromName(const std::string& name);
53
54  // Returns the technology name for a technology identifier in |id|,
55  // or Technology::kUnknownName ("Unknown") if the technology identifier
56  // is unknown.
57  static std::string NameFromIdentifier(Identifier id);
58
59  // Returns the technology identifier for a storage group identifier in
60  // |group|, which should have the format of <technology name>_<suffix>,
61  // or Technology::kUnknown if |group| is not prefixed with a known
62  // technology name.
63  static Identifier IdentifierFromStorageGroup(const std::string& group);
64
65  // Converts the comma-separated list of technology names (with no whitespace
66  // around commas) in |technologies_string| into a vector of technology
67  // identifiers output in |technologies_vector|. Returns true if the
68  // |technologies_string| contains a valid set of technologies with no
69  // duplicate elements, false otherwise.
70  static bool GetTechnologyVectorFromString(
71      const std::string& technologies_string,
72      std::vector<Identifier>* technologies_vector,
73      Error* error);
74
75  // Returns true if |technology| is a primary connectivity technology, i.e.
76  // Ethernet, Cellular, WiFi, WiMAX, or PPPoE.
77  static bool IsPrimaryConnectivityTechnology(Identifier technology);
78
79 private:
80  static const char kLoopbackName[];
81  static const char kTunnelName[];
82  static const char kPPPName[];
83  static const char kPPPoEName[];
84  static const char kUnknownName[];
85};
86
87}  // namespace shill
88
89#endif  // SHILL_TECHNOLOGY_H_
90