1package {
2    // See: http://go/android-license-faq
3    // A large-scale-change added 'default_applicable_licenses' to import
4    // all of the 'license_kinds' from "system_netd_license"
5    // to get the below license kinds:
6    //   SPDX-license-identifier-Apache-2.0
7    default_applicable_licenses: ["system_netd_license"],
8}
9
10java_library {
11    name: "netd_aidl_interface-lateststable-java",
12    sdk_version: "system_current",
13    min_sdk_version: "29",
14    static_libs: [
15        "netd_aidl_interface-V7-java",
16    ],
17    apex_available: [
18        "//apex_available:platform", // used from services.net
19        "com.android.bluetooth.updatable",
20        "com.android.tethering",
21        "com.android.wifi",
22    ],
23}
24
25cc_library_static {
26    name: "netd_event_listener_interface-lateststable-ndk_platform",
27    whole_static_libs: [
28        "netd_event_listener_interface-V1-ndk_platform",
29    ],
30    apex_available: [
31        "com.android.resolv",
32    ],
33    min_sdk_version: "29",
34}
35
36cc_library_static {
37    name: "netd_aidl_interface-lateststable-ndk_platform",
38    whole_static_libs: [
39        "netd_aidl_interface-V7-ndk_platform",
40    ],
41    apex_available: [
42        "com.android.resolv",
43    ],
44    min_sdk_version: "29",
45}
46
47cc_library_static {
48    name: "netd_aidl_interface-lateststable-cpp",
49    whole_static_libs: [
50        "netd_aidl_interface-V7-cpp",
51    ],
52}
53
54aidl_interface {
55    name: "netd_aidl_interface",
56    local_include_dir: "binder",
57    srcs: [
58        "binder/android/net/INetd.aidl",
59        // AIDL interface that callers can implement to receive networking events from netd.
60        "binder/android/net/INetdUnsolicitedEventListener.aidl",
61        "binder/android/net/InterfaceConfigurationParcel.aidl",
62        "binder/android/net/MarkMaskParcel.aidl",
63        "binder/android/net/NativeNetworkConfig.aidl",
64        "binder/android/net/NativeNetworkType.aidl",
65        "binder/android/net/NativeVpnType.aidl",
66        "binder/android/net/RouteInfoParcel.aidl",
67        "binder/android/net/TetherConfigParcel.aidl",
68        "binder/android/net/TetherOffloadRuleParcel.aidl",
69        "binder/android/net/TetherStatsParcel.aidl",
70        "binder/android/net/UidRangeParcel.aidl",
71        // Add new AIDL classes in android.net.netd.aidl to consist with other network modules.
72        "binder/android/net/netd/aidl/**/*.aidl",
73    ],
74    backend: {
75        cpp: {
76            gen_log: true,
77        },
78        java: {
79            // TODO: Remove apex_available and restrict visibility to only mainline modules that are
80            // either outside the system server or use jarjar to rename the generated AIDL classes.
81            apex_available: [
82                "//apex_available:platform", // used from services.net
83                "com.android.bluetooth.updatable",
84                "com.android.tethering",
85                "com.android.wifi",
86            ],
87            // this is part of updatable modules(NetworkStack) which targets 29(Q)
88            min_sdk_version: "29",
89        },
90        ndk: {
91            apex_available: [
92                "//apex_available:platform",
93            ],
94            // This is necessary for the DnsResovler tests to run in Android Q.
95            // Soong would recognize this value and produce the Q compatible aidl library.
96            min_sdk_version: "29",
97        },
98    },
99    versions: [
100        "1",
101        "2",
102        "3",
103        "4",
104        "5",
105        "6",
106        "7",
107    ],
108}
109
110java_library {
111    name: "netd_event_listener_interface-lateststable-java",
112    sdk_version: "system_current",
113    min_sdk_version: "29",
114    static_libs: [
115        "netd_event_listener_interface-V1-java",
116    ],
117    apex_available: [
118        "//apex_available:platform",
119        "com.android.bluetooth.updatable",
120        "com.android.wifi",
121        "com.android.tethering",
122    ],
123}
124
125aidl_interface {
126    name: "netd_event_listener_interface",
127    local_include_dir: "binder",
128    srcs: [
129        "binder/android/net/metrics/INetdEventListener.aidl",
130    ],
131    versions: ["1"],
132    backend: {
133        ndk: {
134            apex_available: [
135                "//apex_available:platform",
136                "com.android.resolv",
137            ],
138            min_sdk_version: "29",
139        },
140        java: {
141            apex_available: [
142                "//apex_available:platform",
143                "com.android.bluetooth.updatable",
144                "com.android.wifi",
145                "com.android.tethering",
146            ],
147            min_sdk_version: "29",
148        },
149    },
150}
151
152aidl_interface {
153    // This interface is for OEM calls to netd and vice versa that do not exist in AOSP.
154    // Those calls cannot be part of INetd.aidl and INetdUnsolicitedEventListener.aidl
155    // because those interfaces are versioned.
156    // These interfaces must never be versioned or OEMs will not be able to change them.
157    name: "oemnetd_aidl_interface",
158    unstable: true,
159    local_include_dir: "binder",
160    srcs: [
161        "binder/com/android/internal/net/IOemNetd.aidl",
162        "binder/com/android/internal/net/IOemNetdUnsolicitedEventListener.aidl",
163    ],
164}
165
166// These are used in netd_integration_test
167// TODO: fold these into a cc_library_static after converting netd/server to Android.bp
168filegroup {
169    name: "netd_integration_test_shared",
170    srcs: [
171        "NetdConstants.cpp",
172        "InterfaceController.cpp",
173        "NetlinkCommands.cpp",
174        "NetlinkListener.cpp",
175        "OffloadUtils.cpp",
176        "SockDiag.cpp",
177        "XfrmController.cpp",
178        "TrafficController.cpp",
179    ],
180}
181
182// Modules common to both netd and netd_unit_test
183cc_library_static {
184    name: "libnetd_server",
185    defaults: ["netd_defaults"],
186    include_dirs: [
187        "system/netd/include",
188        "system/netd/server/binder",
189    ],
190    srcs: [
191        "BandwidthController.cpp",
192        "ClatdController.cpp",
193        "Controllers.cpp",
194        "NetdConstants.cpp",
195        "FirewallController.cpp",
196        "IdletimerController.cpp",
197        "InterfaceController.cpp",
198        "IptablesRestoreController.cpp",
199        "NFLogListener.cpp",
200        "NetlinkCommands.cpp",
201        "NetlinkListener.cpp",
202        "NetlinkManager.cpp",
203        "OffloadUtils.cpp",
204        "RouteController.cpp",
205        "SockDiag.cpp",
206        "StrictController.cpp",
207        "TcpSocketMonitor.cpp",
208        "TetherController.cpp",
209        "TrafficController.cpp",
210        "UidRanges.cpp",
211        "WakeupController.cpp",
212        "XfrmController.cpp",
213    ],
214    shared_libs: [
215        "libbpf_android",
216        "libbase",
217        "libbinder",
218        "libnetdbpf",
219        "libnetutils",
220        "libnetdutils",
221        "libpcap",
222        "libqtaguid",
223        "libssl",
224        "libsysutils",
225        "netd_aidl_interface-V7-cpp",
226        "netd_event_listener_interface-V1-cpp",
227    ],
228    aidl: {
229        export_aidl_headers: true,
230        local_include_dirs: ["binder"],
231    },
232}
233
234cc_binary {
235    name: "netd",
236    defaults: ["netd_defaults"],
237    include_dirs: [
238        "external/mdnsresponder/mDNSShared",
239        "system/netd/include",
240    ],
241    init_rc: ["netd.rc"],
242    required: [
243        "bpfloader",
244        "clatd.o",
245        "netd.o",
246    ],
247    shared_libs: [
248        "android.system.net.netd@1.0",
249        "android.system.net.netd@1.1",
250        "libbase",
251        "libbinder",
252        "libbpf_android",
253        "libcutils",
254        "libdl",
255        "libhidlbase",
256        "liblog",
257        "libmdnssd",
258        "libnetd_resolv",
259        "libnetdbpf",
260        "libnetdutils",
261        "libnetutils",
262        "libpcap",
263        "libprocessgroup",
264        "libqtaguid",
265        "libselinux",
266        "libsysutils",
267        "libutils",
268        "netd_aidl_interface-V7-cpp",
269        "netd_event_listener_interface-V1-cpp",
270        "oemnetd_aidl_interface-cpp",
271    ],
272    static_libs: [
273        "libnetd_server",
274    ],
275    srcs: [
276        "DummyNetwork.cpp",
277        "EventReporter.cpp",
278        "FwmarkServer.cpp",
279        "LocalNetwork.cpp",
280        "MDnsSdListener.cpp",
281        "NetdCommand.cpp",
282        "NetdHwService.cpp",
283        "NetdNativeService.cpp",
284        "NetlinkHandler.cpp",
285        "Network.cpp",
286        "NetworkController.cpp",
287        "OemNetdListener.cpp",
288        "PhysicalNetwork.cpp",
289        "PppController.cpp",
290        "Process.cpp",
291        "UnreachableNetwork.cpp",
292        "VirtualNetwork.cpp",
293        "main.cpp",
294        "oem_iptables_hook.cpp",
295    ],
296    sanitize: {
297        cfi: true,
298    },
299}
300
301cc_binary {
302    name: "ndc",
303    defaults: ["netd_defaults"],
304    include_dirs: [
305        "system/netd/include",
306    ],
307    header_libs: [
308        "libnetd_client_headers",
309    ],
310    shared_libs: [
311        "libbase",
312        "libnetdutils",
313        "libnetutils",
314        "libcutils",
315        "liblog",
316        "libutils",
317        "libbinder",
318        "dnsresolver_aidl_interface-V7-cpp",
319        "netd_aidl_interface-V6-cpp",
320    ],
321    srcs: [
322        "ndc.cpp",
323        "UidRanges.cpp",
324        "NdcDispatcher.cpp",
325    ],
326    sanitize: {
327        cfi: true,
328        memtag_heap: true,
329    },
330}
331
332cc_test {
333    name: "netd_unit_test",
334    defaults: ["netd_defaults"],
335    test_suites: ["device-tests"],
336    require_root: true,
337    include_dirs: [
338        "system/netd/include",
339        "system/netd/server/binder",
340        "system/netd/tests",
341    ],
342    srcs: [
343        "BandwidthControllerTest.cpp",
344        "ClatdControllerTest.cpp",
345        "ControllersTest.cpp",
346        "FirewallControllerTest.cpp",
347        "IdletimerControllerTest.cpp",
348        "InterfaceControllerTest.cpp",
349        "IptablesBaseTest.cpp",
350        "IptablesRestoreControllerTest.cpp",
351        "NFLogListenerTest.cpp",
352        "OffloadUtilsTest.cpp",
353        "RouteControllerTest.cpp",
354        "SockDiagTest.cpp",
355        "StrictControllerTest.cpp",
356        "TetherControllerTest.cpp",
357        "TrafficControllerTest.cpp",
358        "XfrmControllerTest.cpp",
359        "WakeupControllerTest.cpp",
360    ],
361    static_libs: [
362        "libgmock",
363        "libnetd_server",
364        "libnetd_test_tun_interface",
365        "libqtaguid",
366        "netd_aidl_interface-V7-cpp",
367        "netd_event_listener_interface-V1-cpp",
368    ],
369    shared_libs: [
370        "libbase",
371        "libbinder",
372        "libbpf_android",
373        "libcrypto",
374        "libcutils",
375        "liblog",
376        "libnetdbpf",
377        "libnetdutils",
378        "libnetutils",
379        "libsysutils",
380        "libutils",
381    ],
382    // tidy: false,  // cuts test build time by almost 1 minute
383}
384