• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3.4
2#
3#   Copyright 2018 - The Android Open Source Project
4#
5#   Licensed under the Apache License, Version 2.0 (the 'License');
6#   you may not use this file except in compliance with the License.
7#   You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11#   Unless required by applicable law or agreed to in writing, software
12#   distributed under the License is distributed on an 'AS IS' BASIS,
13#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14#   See the License for the specific language governing permissions and
15#   limitations under the License.
16
17import time
18from acts.test_decorators import test_tracker_info
19from acts_contrib.test_utils.power import PowerWiFiBaseTest as PWBT
20from acts_contrib.test_utils.wifi import wifi_power_test_utils as wputils
21from acts.controllers import packet_sender as pkt_utils
22from acts.controllers.adb_lib.error import AdbCommandError
23
24RA_SHORT_LIFETIME = 3
25RA_LONG_LIFETIME = 1000
26DNS_LONG_LIFETIME = 300
27DNS_SHORT_LIFETIME = 3
28
29
30class PowerWiFimulticastTest(PWBT.PowerWiFiBaseTest):
31    def setup_class(self):
32        super().setup_class()
33        self.unpack_userparams(sub_mask="255.255.255.0",
34                               mac_dst="get_from_dut",
35                               mac_src="get_local",
36                               ipv4_dst="get_from_dut",
37                               ipv4_src="get_local",
38                               ipv6_dst="get_from_dut",
39                               ipv6_src="get_local",
40                               ipv6_src_type="LINK_LOCAL",
41                               ipv4_gwt="192.168.1.1",
42                               mac_dst_fake="40:90:28:EF:4B:20",
43                               ipv4_dst_fake="192.168.1.60",
44                               ipv6_dst_fake="fe80::300f:40ee:ee0a:5000",
45                               interval=1)
46
47    def set_connection(self):
48        """Setup connection between AP and client.
49
50        Setup connection between AP and phone, change DTIMx1 and get information
51        such as IP addresses to prepare packet construction.
52
53        """
54        attrs = ['screen_status', 'wifi_band']
55        indices = [2, 4]
56        self.decode_test_configs(attrs, indices)
57        # Change DTIMx1 on the phone to receive all Multicast packets
58
59        # Starts from P21 device, the dtim setting method is changed to use adb.
60        # If no file match '/vendor/firmware/wlan/*/*.ini', use adb to change
61        # the dtim.
62        change_dtim_with_adb = False
63        try:
64            self.dut.adb.shell('ls /vendor/firmware/wlan/*/*.ini')
65        except AdbCommandError as e:
66            change_dtim_with_adb = True
67
68        if not change_dtim_with_adb:
69            # Initialize the dut to rock-bottom state
70            rebooted = wputils.change_dtim(
71                self.dut,
72                gEnableModulatedDTIM=1,
73                gMaxLIModulatedDTIM=10)
74            if rebooted:
75                self.dut_rockbottom()
76            self.dut.log.info('DTIM value of the phone is now DTIMx1')
77
78        self.setup_ap_connection(
79            self.main_network[self.test_configs.wifi_band])
80        # Wait for DHCP with timeout of 60 seconds
81        wputils.wait_for_dhcp(self.pkt_sender.interface)
82
83        if change_dtim_with_adb:
84            self.dut.log.info('No ini file for dtim, change dtim with adb')
85            wputils.change_dtim_adb(self.dut, gEnableModulatedDTIM=1)
86
87        # Set the desired screen status
88        if self.test_configs.screen_status == 'OFF':
89            self.dut.droid.goToSleepNow()
90            self.dut.log.info('Screen is OFF')
91        time.sleep(5)
92
93    def sendPacketAndMeasure(self, packet):
94        """Packet injection template function
95
96        Args:
97            packet: packet to be sent/inject
98        """
99        # Start sending packets and measure power
100        self.pkt_sender.start_sending(packet, self.interval)
101        self.measure_power_and_validate()
102
103    # Test cases - screen OFF
104    @test_tracker_info(uuid='b5378aaf-7949-48ac-95fb-ee94c85d49c3')
105    def test_screen_OFF_band_5g_directed_arp(self):
106        self.set_connection()
107        self.pkt_gen_config = wputils.create_pkt_config(self)
108        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
109        packet = pkt_gen.generate()
110        self.sendPacketAndMeasure(packet)
111
112    @test_tracker_info(uuid='3b5d348d-70bf-483d-8736-13da569473aa')
113    def test_screen_OFF_band_5g_misdirected_arp(self):
114        self.set_connection()
115        self.pkt_gen_config = wputils.create_pkt_config(self)
116        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
117        packet = pkt_gen.generate(ip_dst=self.ipv4_dst_fake)
118        self.sendPacketAndMeasure(packet)
119
120    @test_tracker_info(uuid='dd3ff80d-97ce-4408-92f8-f2c72ce8d79c')
121    def test_screen_OFF_band_5g_unicast_invalid_ip_arp_request(self):
122        self.set_connection()
123        self.pkt_gen_config = wputils.create_pkt_config(self)
124        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
125        packet = pkt_gen.generate(ip_dst='0.0.0.0',
126                                  eth_dst=self.pkt_gen_config['dst_mac'])
127        self.sendPacketAndMeasure(packet)
128
129    @test_tracker_info(uuid='5dcb16f1-725c-45de-8103-340104d60a22')
130    def test_screen_OFF_band_5g_unicast_misdirected_arp_request(self):
131        self.set_connection()
132        self.pkt_gen_config = wputils.create_pkt_config(self)
133        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
134        packet = pkt_gen.generate(ip_dst=self.ipv4_dst_fake,
135                                  eth_dst=self.pkt_gen_config['dst_mac'])
136        self.sendPacketAndMeasure(packet)
137
138    @test_tracker_info(uuid='5ec4800f-a82e-4462-8b65-4fcd0b1940a2')
139    def test_screen_OFF_band_5g_unicast_invalid_src_arp_reply(self):
140        self.set_connection()
141        self.pkt_gen_config = wputils.create_pkt_config(self)
142        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
143        packet = pkt_gen.generate(op='is-at',
144                                  ip_src='0.0.0.0',
145                                  ip_dst=self.ipv4_dst_fake,
146                                  hwdst=self.mac_dst_fake,
147                                  eth_dst=self.pkt_gen_config['dst_mac'])
148        self.sendPacketAndMeasure(packet)
149
150    @test_tracker_info(uuid='6c5c0e9e-7a00-43d0-a6e8-355141467703')
151    def test_screen_OFF_band_5g_unicast_misdirected_arp_reply(self):
152        self.set_connection()
153        self.pkt_gen_config = wputils.create_pkt_config(self)
154        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
155        packet = pkt_gen.generate(op='is-at',
156                                  ip_dst=self.ipv4_dst_fake,
157                                  hwdst=self.mac_dst_fake,
158                                  eth_dst=self.pkt_gen_config['dst_mac'])
159        self.sendPacketAndMeasure(packet)
160
161    @test_tracker_info(uuid='8e534d3b-5a25-429a-a1bb-8119d7d28b5a')
162    def test_screen_OFF_band_5g_directed_ns(self):
163        self.set_connection()
164        self.pkt_gen_config = wputils.create_pkt_config(self)
165        pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
166        packet = pkt_gen.generate()
167        self.sendPacketAndMeasure(packet)
168
169    @test_tracker_info(uuid='536d716d-f30b-4d20-9976-e2cbc36c3415')
170    def test_screen_OFF_band_5g_misdirected_ns(self):
171        self.set_connection()
172        self.pkt_gen_config = wputils.create_pkt_config(self)
173        pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
174        packet = pkt_gen.generate(ip_dst=self.ipv6_dst_fake)
175        self.sendPacketAndMeasure(packet)
176
177    @test_tracker_info(uuid='5eed3174-8e94-428e-8527-19a9b5a90322')
178    def test_screen_OFF_band_5g_ra_short(self):
179        self.set_connection()
180        self.pkt_gen_config = wputils.create_pkt_config(self)
181        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
182        packet = pkt_gen.generate(RA_SHORT_LIFETIME)
183        self.sendPacketAndMeasure(packet)
184
185    @test_tracker_info(uuid='67867bae-f1c5-44a4-9bd0-2b832ac8059c')
186    def test_screen_OFF_band_5g_ra_long(self):
187        self.set_connection()
188        self.pkt_gen_config = wputils.create_pkt_config(self)
189        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
190        packet = pkt_gen.generate(RA_LONG_LIFETIME)
191        self.sendPacketAndMeasure(packet)
192
193    @test_tracker_info(uuid='db19bc94-3513-45c4-b3a5-d6219649d0bb')
194    def test_screen_OFF_band_5g_directed_dhcp_offer(self):
195        self.set_connection()
196        self.pkt_gen_config = wputils.create_pkt_config(self)
197        pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
198        packet = pkt_gen.generate()
199        self.sendPacketAndMeasure(packet)
200
201    @test_tracker_info(uuid='a8059869-40ee-4cf3-a957-4b7aed03fcf9')
202    def test_screen_OFF_band_5g_misdirected_dhcp_offer(self):
203        self.set_connection()
204        self.pkt_gen_config = wputils.create_pkt_config(self)
205        pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
206        packet = pkt_gen.generate(self.mac_dst_fake, self.ipv4_dst_fake)
207        self.sendPacketAndMeasure(packet)
208
209    @test_tracker_info(uuid='6e663f0a-3eb5-46f6-a79e-311baebd5d2a')
210    def test_screen_OFF_band_5g_ra_rnds_short(self):
211        self.set_connection()
212        self.pkt_gen_config = wputils.create_pkt_config(self)
213        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
214        packet = pkt_gen.generate(RA_LONG_LIFETIME,
215                                  enableDNS=True,
216                                  dns_lifetime=DNS_SHORT_LIFETIME)
217        self.sendPacketAndMeasure(packet)
218
219    @test_tracker_info(uuid='84d2f1ff-bd4f-46c6-9b06-826d9b14909c')
220    def test_screen_OFF_band_5g_ra_rnds_long(self):
221        self.set_connection()
222        self.pkt_gen_config = wputils.create_pkt_config(self)
223        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
224        packet = pkt_gen.generate(RA_LONG_LIFETIME,
225                                  enableDNS=True,
226                                  dns_lifetime=DNS_LONG_LIFETIME)
227        self.sendPacketAndMeasure(packet)
228
229    @test_tracker_info(uuid='4a17e74f-3e7f-4e90-ac9e-884a7c13cede')
230    def test_screen_OFF_band_5g_directed_ping6(self):
231        self.set_connection()
232        self.pkt_gen_config = wputils.create_pkt_config(self)
233        pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
234        packet = pkt_gen.generate()
235        self.sendPacketAndMeasure(packet)
236
237    @test_tracker_info(uuid='ab249e0d-58ba-4b55-8a81-e1e4fb04780a')
238    def test_screen_OFF_band_5g_misdirected_ping6(self):
239        self.set_connection()
240        self.pkt_gen_config = wputils.create_pkt_config(self)
241        pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
242        packet = pkt_gen.generate(self.ipv6_dst_fake, pkt_utils.MAC_BROADCAST)
243        self.sendPacketAndMeasure(packet)
244
245    @test_tracker_info(uuid='e37112e6-5c35-4c89-8d15-f5a44e69be0b')
246    def test_screen_OFF_band_5g_directed_ping4(self):
247        self.set_connection()
248        self.pkt_gen_config = wputils.create_pkt_config(self)
249        pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
250        packet = pkt_gen.generate()
251        self.sendPacketAndMeasure(packet)
252
253    @test_tracker_info(uuid='afd4a011-63a9-46c3-8a75-13f515ba8475')
254    def test_screen_OFF_band_5g_misdirected_ping4(self):
255        self.set_connection()
256        self.pkt_gen_config = wputils.create_pkt_config(self)
257        pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
258        packet = pkt_gen.generate(self.ipv4_dst_fake, pkt_utils.MAC_BROADCAST)
259        self.sendPacketAndMeasure(packet)
260
261    @test_tracker_info(uuid='03f0e845-fd66-4120-a79d-5eb64d49b6cd')
262    def test_screen_OFF_band_5g_mdns6(self):
263        self.set_connection()
264        self.pkt_gen_config = wputils.create_pkt_config(self)
265        pkt_gen = pkt_utils.Mdns6Generator(**self.pkt_gen_config)
266        packet = pkt_gen.generate()
267        self.sendPacketAndMeasure(packet)
268
269    @test_tracker_info(uuid='dcbb0aec-512d-48bd-b743-024697ce511b')
270    def test_screen_OFF_band_5g_mdns4(self):
271        self.set_connection()
272        self.pkt_gen_config = wputils.create_pkt_config(self)
273        pkt_gen = pkt_utils.Mdns4Generator(**self.pkt_gen_config)
274        packet = pkt_gen.generate()
275        self.sendPacketAndMeasure(packet)
276
277    @test_tracker_info(uuid='16dabe69-27a6-470b-a474-4774cd3e4715')
278    def test_screen_OFF_band_5g_dot3(self):
279        self.set_connection()
280        self.pkt_gen_config = wputils.create_pkt_config(self)
281        pkt_gen = pkt_utils.Dot3Generator(**self.pkt_gen_config)
282        packet = pkt_gen.generate()
283        self.sendPacketAndMeasure(packet)
284
285    @test_tracker_info(uuid='55d00670-f34b-4289-95fa-b618e509c15c')
286    def test_screen_OFF_band_5g_dot3_llc(self):
287        self.set_connection()
288        self.pkt_gen_config = wputils.create_pkt_config(self)
289        pkt_gen = pkt_utils.Dot3Generator(**self.pkt_gen_config)
290        packet = pkt_gen.generate_llc()
291        self.sendPacketAndMeasure(packet)
292
293    @test_tracker_info(uuid='75ba3435-fe63-4a21-8cbe-2f631043f632')
294    def test_screen_OFF_band_5g_dot3_snap(self):
295        self.set_connection()
296        self.pkt_gen_config = wputils.create_pkt_config(self)
297        pkt_gen = pkt_utils.Dot3Generator(**self.pkt_gen_config)
298        packet = pkt_gen.generate_snap()
299        self.sendPacketAndMeasure(packet)
300
301    # Test cases: screen ON
302    @test_tracker_info(uuid='b9550149-bf36-4f86-9b4b-6e900756a90e')
303    def test_screen_ON_band_5g_directed_arp(self):
304        self.set_connection()
305        self.pkt_gen_config = wputils.create_pkt_config(self)
306        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
307        packet = pkt_gen.generate()
308        self.sendPacketAndMeasure(packet)
309
310    @test_tracker_info(uuid='406dffae-104e-46cb-9ec2-910aac7aca39')
311    def test_screen_ON_band_5g_misdirected_arp(self):
312        self.set_connection()
313        self.pkt_gen_config = wputils.create_pkt_config(self)
314        pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
315        packet = pkt_gen.generate(self.ipv4_dst_fake)
316        self.sendPacketAndMeasure(packet)
317
318    @test_tracker_info(uuid='be4cb543-c710-4041-a770-819e82a6d164')
319    def test_screen_ON_band_5g_directed_ns(self):
320        self.set_connection()
321        self.pkt_gen_config = wputils.create_pkt_config(self)
322        pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
323        packet = pkt_gen.generate()
324        self.sendPacketAndMeasure(packet)
325
326    @test_tracker_info(uuid='de21d24f-e03e-47a1-8bbb-11953200e870')
327    def test_screen_ON_band_5g_misdirected_ns(self):
328        self.set_connection()
329        self.pkt_gen_config = wputils.create_pkt_config(self)
330        pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
331        packet = pkt_gen.generate(self.ipv6_dst_fake)
332        self.sendPacketAndMeasure(packet)
333
334    @test_tracker_info(uuid='b424a170-5095-4b47-82eb-50f7b7fdf35d')
335    def test_screen_ON_band_5g_ra_short(self):
336        self.set_connection()
337        self.pkt_gen_config = wputils.create_pkt_config(self)
338        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
339        packet = pkt_gen.generate(RA_SHORT_LIFETIME)
340        self.sendPacketAndMeasure(packet)
341
342    @test_tracker_info(uuid='ab627e59-2ee8-4c0d-970b-eeb1d1cecdc1')
343    def test_screen_ON_band_5g_ra_long(self):
344        self.set_connection()
345        self.pkt_gen_config = wputils.create_pkt_config(self)
346        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
347        packet = pkt_gen.generate(RA_LONG_LIFETIME)
348        self.sendPacketAndMeasure(packet)
349
350    @test_tracker_info(uuid='ee6514ab-1814-44b9-ba01-63f77ba77c34')
351    def test_screen_ON_band_5g_directed_dhcp_offer(self):
352        self.set_connection()
353        self.pkt_gen_config = wputils.create_pkt_config(self)
354        pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
355        packet = pkt_gen.generate()
356        self.sendPacketAndMeasure(packet)
357
358    @test_tracker_info(uuid='eaebfe98-32da-4ebc-bca7-3b7026d99a4f')
359    def test_screen_ON_band_5g_misdirected_dhcp_offer(self):
360        self.set_connection()
361        self.pkt_gen_config = wputils.create_pkt_config(self)
362        pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
363        packet = pkt_gen.generate(self.mac_dst_fake, self.ipv4_dst_fake)
364        self.sendPacketAndMeasure(packet)
365
366    @test_tracker_info(uuid='f0e2193f-bf6a-441b-b9c1-bb7b65787cd5')
367    def test_screen_ON_band_5g_ra_rnds_short(self):
368        self.set_connection()
369        self.pkt_gen_config = wputils.create_pkt_config(self)
370        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
371        packet = pkt_gen.generate(RA_LONG_LIFETIME,
372                                  enableDNS=True,
373                                  dns_lifetime=DNS_SHORT_LIFETIME)
374        self.sendPacketAndMeasure(packet)
375
376    @test_tracker_info(uuid='62b99cd7-75bf-45be-b93f-bb037a13b3e2')
377    def test_screen_ON_band_5g_ra_rnds_long(self):
378        self.set_connection()
379        self.pkt_gen_config = wputils.create_pkt_config(self)
380        pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
381        packet = pkt_gen.generate(RA_LONG_LIFETIME,
382                                  enableDNS=True,
383                                  dns_lifetime=DNS_LONG_LIFETIME)
384        self.sendPacketAndMeasure(packet)
385
386    @test_tracker_info(uuid='4088af4c-a64b-4fc1-848c-688936cc6c12')
387    def test_screen_ON_band_5g_directed_ping6(self):
388        self.set_connection()
389        self.pkt_gen_config = wputils.create_pkt_config(self)
390        pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
391        packet = pkt_gen.generate()
392        self.sendPacketAndMeasure(packet)
393
394    @test_tracker_info(uuid='3179e327-e6ac-4dae-bb8a-f3940f21094d')
395    def test_screen_ON_band_5g_misdirected_ping6(self):
396        self.set_connection()
397        self.pkt_gen_config = wputils.create_pkt_config(self)
398        pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
399        packet = pkt_gen.generate(self.ipv6_dst_fake, pkt_utils.MAC_BROADCAST)
400        self.sendPacketAndMeasure(packet)
401
402    @test_tracker_info(uuid='90c70e8a-74fd-4878-89c6-5e15c3ede318')
403    def test_screen_ON_band_5g_directed_ping4(self):
404        self.set_connection()
405        self.pkt_gen_config = wputils.create_pkt_config(self)
406        pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
407        packet = pkt_gen.generate()
408        self.sendPacketAndMeasure(packet)
409
410    @test_tracker_info(uuid='dcfabbc7-a7e1-4a92-a38d-8ebe7aa2e063')
411    def test_screen_ON_band_5g_misdirected_ping4(self):
412        self.set_connection()
413        self.pkt_gen_config = wputils.create_pkt_config(self)
414        pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
415        packet = pkt_gen.generate(self.ipv4_dst_fake, pkt_utils.MAC_BROADCAST)
416        self.sendPacketAndMeasure(packet)
417
418    @test_tracker_info(uuid='117814db-f94d-4239-a7ab-033482b1da52')
419    def test_screen_ON_band_5g_mdns6(self):
420        self.set_connection()
421        self.pkt_gen_config = wputils.create_pkt_config(self)
422        pkt_gen = pkt_utils.Mdns6Generator(**self.pkt_gen_config)
423        packet = pkt_gen.generate()
424        self.sendPacketAndMeasure(packet)
425
426    @test_tracker_info(uuid='ce6ad7e2-21f3-4e68-9c0d-d0e14e0a7c53')
427    def test_screen_ON_band_5g_mdns4(self):
428        self.set_connection()
429        self.pkt_gen_config = wputils.create_pkt_config(self)
430        pkt_gen = pkt_utils.Mdns4Generator(**self.pkt_gen_config)
431        packet = pkt_gen.generate()
432        self.sendPacketAndMeasure(packet)
433