xref: /openwifi/doc/app_notes/inject_80211.md (revision a6085186d94dfe08b0e09c18c8d4b1b4fe38ea35)
1*a6085186SLina Ceballos<!--
2*a6085186SLina CeballosSPDX-FileCopyrightText: 2019 Jiao Xianjun <[email protected]>
3*a6085186SLina CeballosSPDX-License-Identifier: AGPL-3.0-or-later
4*a6085186SLina Ceballos-->
57273ec43Smmehari
67273ec43Smmehari## 802.11 packet injection
77273ec43Smmehari
87273ec43SmmehariThe Linux wireless networking stack (i.e. driver, mac80211, cfg80211, net_dev, user app) is a robust implementation supporting a plethora of wireless devices. As robust as it is, it also has a drawback when it comes to single-layer testing.
97273ec43Smmehari
107273ec43SmmehariPing and Iperf are well established performance measurement tools. However, using such tools to measure 802.11 PHY performance can be misleading, simply because they touch multiple layers in the network stack.
117273ec43Smmehari
127273ec43SmmehariLuckily, the mac80211 Linux subsystem provides packet injection functionality and it allows us to have finer control over physical layer testing.
137273ec43Smmehari
147273ec43SmmehariTo this end, we have adapted a [packetspammer](https://github.com/gnychis/packetspammer) application originally written by Andy Green <[email protected]> and maintained by George Nychis <[email protected]>.
157273ec43Smmehari
167273ec43Smmehari### inject_80211
177273ec43SmmehariUserspace program to inject 802.11 packets through mac80211 supported (softmac) wireless devices.
187273ec43Smmehari
197273ec43Smmehari### Options
207273ec43Smmehari  ```
217273ec43Smmehari-m/--hw_mode <hardware operation mode> (a,g,n)
227273ec43Smmehari-r/--rate_index <rate/MCS index> (0,1,2,3,4,5,6,7)
237273ec43Smmehari-i/--sgi_flag (0,1)
247273ec43Smmehari-n/--num_packets <number of packets>
257273ec43Smmehari-s/--payload_size <payload size in bytes>
267273ec43Smmehari-d/--delay <delay between packets in usec>
277273ec43Smmehari-h   this menu
287273ec43Smmehari  ```
297273ec43Smmehari
307273ec43Smmehari### Example:
317273ec43Smmehari```
327273ec43Smmehariiw dev wlan0 interface add mon0 type monitor && ifconfig mon0 up
337273ec43Smmehariinject_80211 -m n -r 0  -n 64 -s 100 mon0     # Inject 10 802.11n packets at 6.5Mbps bitrate and 64bytes size
347273ec43Smmehari```
357273ec43Smmehari
367273ec43Smmehari### Link performance test
377273ec43Smmehari
387273ec43SmmehariTo make a profound experimental analysis on the physical layer performance, we can rely on automation scripts.
397273ec43Smmehari
407273ec43SmmehariThe following script will inject 100 802.11n packets at different bitrates and payload sizes.
417273ec43Smmehari
427273ec43Smmehari```
437273ec43Smmehari#!/bin/bash
447273ec43Smmehari
457273ec43SmmehariHW_MODE='n'
467273ec43SmmehariCOUNT=100
477273ec43SmmehariDELAY=1000
487273ec43SmmehariRATE=( 0 1 2 3 4 5 6 7 )
497273ec43SmmehariSIZE=( $(seq -s' ' 50 100 1450) ) # paload size in bytes
507273ec43SmmehariIF="mon0"
517273ec43Smmehari
527273ec43Smmeharifor (( i = 0 ; i < ${#PAYLOAD[@]} ; i++ )) do
537273ec43Smmehari	for (( j = 0 ; j < ${#RATE[@]} ; j++ )) do
547273ec43Smmehari		inject_80211 -m $HW_MODE -n $COUNT -d $DELAY -r ${RATE[$j]} -s ${SIZE[$i]} $IF
557273ec43Smmehari		sleep 1
567273ec43Smmehari	done
577273ec43Smmeharidone
587273ec43Smmehari
597273ec43Smmehari```
607273ec43Smmehari
617273ec43SmmehariOn the receiver side, we can use tcpdump to collect the pcap traces.
627273ec43Smmehari
637273ec43Smmehari```
647273ec43Smmehariiw dev wlan0 interface add mon0 type monitor && ifconfig mon0 up
657273ec43Smmeharitcpdump -i mon0 -w trace.pcap 'wlan addr1 ff:ff:ff:ff:ff:ff and wlan addr2 66:55:44:33:22:11'
667273ec43Smmehari```
677273ec43Smmehari
687273ec43SmmehariWlan addresses *ff:ff:ff:ff:ff:ff* and *66:55:44:33:22:11* are specific to our injector application.
697273ec43Smmehari
707273ec43SmmehariNext, we analyze the collected pcap traces using the analysis tool provided.
717273ec43Smmehari
727273ec43Smmehari```
737273ec43Smmeharianalyze_80211 trace.pcap
747273ec43Smmehari```
757273ec43Smmehari
767273ec43SmmehariAn excerpt from a sample analysis looks the following
777273ec43Smmehari
787273ec43Smmehari```
797273ec43SmmehariHW MODE	RATE(Mbps)	SGI	SIZE(bytes)	COUNT	Duration(sec)
807273ec43Smmehari=======	==========	===	===========	=====	=============
817273ec43Smmehari802.11n	6.5           	OFF	54		100	0.11159
827273ec43Smmehari802.11n	13.0		OFF	54		100	0.11264
837273ec43Smmehari802.11n	19.5		OFF	54		100	0.11156
847273ec43Smmehari802.11n	26.0		OFF	54	    	100	0.11268
857273ec43Smmehari802.11n	39.0		OFF	54	    	100	0.11333
867273ec43Smmehari802.11n	52.0		OFF	54	    	100	0.11149
877273ec43Smmehari802.11n	58.5		OFF	54	    	100	0.11469
887273ec43Smmehari802.11n	65.0		OFF	54	    	100	0.11408
897273ec43Smmehari```
907273ec43Smmehari
91