summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/NetIdManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/NetIdManager.h')
-rw-r--r--dom/system/gonk/NetIdManager.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/dom/system/gonk/NetIdManager.h b/dom/system/gonk/NetIdManager.h
new file mode 100644
index 000000000..e35d0ecd2
--- /dev/null
+++ b/dom/system/gonk/NetIdManager.h
@@ -0,0 +1,45 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef NetIdManager_h
+#define NetIdManager_h
+
+#include "nsString.h"
+#include "nsDataHashtable.h"
+
+// NetId is a logical network identifier defined by netd.
+// A network is typically a physical one (i.e. PhysicalNetwork.cpp)
+// for netd but it could be a virtual network as well.
+// We currently use physical network only and use one-to-one
+// network-interface mapping.
+
+class NetIdManager {
+public:
+ // keep in sync with system/netd/NetworkController.cpp
+ enum {
+ MIN_NET_ID = 100,
+ MAX_NET_ID = 65535,
+ };
+
+ // We need to count the number of references since different
+ // application like data and mms may use the same interface.
+ struct NetIdInfo {
+ int mNetId;
+ int mRefCnt;
+ };
+
+public:
+ NetIdManager();
+
+ bool lookup(const nsString& aInterfaceName, NetIdInfo* aNetIdInfo);
+ void acquire(const nsString& aInterfaceName, NetIdInfo* aNetIdInfo);
+ bool release(const nsString& aInterfaceName, NetIdInfo* aNetIdInfo);
+
+private:
+ int getNextNetId();
+ int mNextNetId;
+ nsDataHashtable<nsStringHashKey, NetIdInfo> mInterfaceToNetIdHash;
+};
+
+#endif \ No newline at end of file