ClatdController - add mutex annotations

This effectively makes ClatdController single threaded.
Which makes things nice and simple.

Test: atest libbpf_android_test libnetdbpf_test netd_integration_test netd_unit_test netdutils_test resolv_integration_test resolv_unit_test
Bug: 65674744
Change-Id: I352761b6c44c17f9ea0897ea821a826f642659d5
diff --git a/server/ClatdController.h b/server/ClatdController.h
index ceebde6..6bfc0f1 100644
--- a/server/ClatdController.h
+++ b/server/ClatdController.h
@@ -39,19 +39,18 @@
 
 class ClatdController {
   public:
-    explicit ClatdController(NetworkController* controller);
-    virtual ~ClatdController();
+    explicit ClatdController(NetworkController* controller) EXCLUDES(mutex);
+    virtual ~ClatdController() EXCLUDES(mutex);
 
-    void Init(void);
+    /* First thing init/startClatd/stopClatd/dump do is grab the mutex. */
+    void init(void) EXCLUDES(mutex);
 
     int startClatd(const std::string& interface, const std::string& nat64Prefix,
-                   std::string* v6Addr);
-    int stopClatd(const std::string& interface);
+                   std::string* v6Addr) EXCLUDES(mutex);
+    int stopClatd(const std::string& interface) EXCLUDES(mutex);
 
     void dump(netdutils::DumpWriter& dw) EXCLUDES(mutex);
 
-    std::mutex mutex;
-
   private:
     struct ClatdTracker {
         const NetworkController* netCtrl = nullptr;
@@ -75,9 +74,11 @@
         int init(const std::string& interface, const std::string& nat64Prefix);
     };
 
-    const NetworkController* mNetCtrl;
-    std::map<std::string, ClatdTracker> mClatdTrackers;
-    ClatdTracker* getClatdTracker(const std::string& interface);
+    std::mutex mutex;
+
+    const NetworkController* mNetCtrl GUARDED_BY(mutex);
+    std::map<std::string, ClatdTracker> mClatdTrackers GUARDED_BY(mutex);
+    ClatdTracker* getClatdTracker(const std::string& interface) REQUIRES(mutex);
 
     static in_addr_t selectIpv4Address(const in_addr ip, int16_t prefixlen);
     static int generateIpv6Address(const char* iface, const in_addr v4, const in6_addr& nat64Prefix,
@@ -89,12 +90,12 @@
         ClatEbpfMaybe,     // >=4.9 kernel &&   P api shipping level -- might work
         ClatEbpfEnabled,   // >=4.9 kernel && >=Q api shipping level -- must work
     };
-    eClatEbpfMode mClatEbpfMode;
-    base::unique_fd mNetlinkFd;
-    bpf::BpfMap<ClatIngressKey, ClatIngressValue> mClatIngressMap;
+    eClatEbpfMode mClatEbpfMode GUARDED_BY(mutex);
+    base::unique_fd mNetlinkFd GUARDED_BY(mutex);
+    bpf::BpfMap<ClatIngressKey, ClatIngressValue> mClatIngressMap GUARDED_BY(mutex);
 
-    void maybeStartBpf(const ClatdTracker& tracker);
-    void maybeStopBpf(const ClatdTracker& tracker);
+    void maybeStartBpf(const ClatdTracker& tracker) REQUIRES(mutex);
+    void maybeStopBpf(const ClatdTracker& tracker) REQUIRES(mutex);
 
     // For testing.
     friend class ClatdControllerTest;