aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-ieee80211-radio.c275
-rw-r--r--epan/dissectors/packet-ieee80211-radiotap.c27
-rw-r--r--wiretap/wtap.h16
3 files changed, 316 insertions, 2 deletions
diff --git a/epan/dissectors/packet-ieee80211-radio.c b/epan/dissectors/packet-ieee80211-radio.c
index 863fb7cf2e..bb308df71c 100644
--- a/epan/dissectors/packet-ieee80211-radio.c
+++ b/epan/dissectors/packet-ieee80211-radio.c
@@ -24,6 +24,7 @@
#include "packet-ieee80211.h"
#include "packet-ieee80211-radio.h"
+#include "packet-ieee80211-radiotap-defs.h"
#include "math.h"
void proto_register_ieee80211_radio(void);
@@ -383,6 +384,262 @@ static float ieee80211_vhtrate(int mcs_index, guint bandwidth_index, gboolean sh
return (float)(ieee80211_vhtinfo[mcs_index].data_bits_per_symbol * subcarriers[bandwidth_index] / (short_gi ? 3.6 : 4.0) / 52.0);
}
+/*
+ * HE SU OFDM MCS rate table converted from http://mcsindex.com/
+ * indexed by (NSTS,MCS,BW,GI)
+ */
+#define HE_MAX_NSTS 8
+#define HE_MAX_MCS 12
+#define HE_SU_MAX_BW 4
+#define HE_MAX_GI 3
+static float he_ofdm_tab[HE_MAX_NSTS][HE_MAX_MCS][HE_SU_MAX_BW][HE_MAX_GI] = {
+ {
+ {{ 8.6f, 8.1f, 7.3f},{ 17.2f, 16.3f, 14.6f},{ 36.0f, 34.0f, 30.6f},{ 72.1f, 68.1f, 61.3f}},
+ {{ 17.2f, 16.3f, 14.6f},{ 34.4f, 32.5f, 29.3f},{ 72.1f, 68.1f, 61.3f},{ 144.1f, 136.1f, 122.5f}},
+ {{ 25.8f, 24.4f, 21.9f},{ 51.6f, 48.8f, 43.9f},{ 108.1f, 102.1f, 91.9f},{ 216.2f, 204.2f, 183.8f}},
+ {{ 34.4f, 32.5f, 29.3f},{ 68.8f, 65.0f, 58.5f},{ 144.1f, 136.1f, 122.5f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 77.4f, 73.1f, 65.8f},{ 154.9f, 146.3f, 131.6f},{ 324.3f, 306.3f, 275.6f},{ 648.5f, 612.5f, 551.3f}},
+ {{ 86.0f, 81.3f, 73.1f},{ 172.1f, 162.5f, 146.3f},{ 360.3f, 340.3f, 306.3f},{ 720.6f, 680.6f, 612.5f}},
+ {{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 114.7f, 108.3f, 97.5f},{ 229.4f, 216.7f, 195.0f},{ 480.4f, 453.7f, 408.3f},{ 960.8f, 907.4f, 816.7f}},
+ {{ 129.0f, 121.9f, 109.7f},{ 258.1f, 243.8f, 219.4f},{ 540.4f, 510.4f, 459.4f},{ 1080.9f, 1020.8f, 918.8f}},
+ {{ 143.4f, 135.4f, 121.9f},{ 286.8f, 270.8f, 243.8f},{ 600.5f, 567.1f, 510.4f},{ 1201.0f, 1134.3f, 1020.8f}}
+ },{
+ {{ 17.2f, 16.3f, 14.6f},{ 34.4f, 32.5f, 29.3f},{ 72.1f, 68.1f, 61.3f},{ 144.1f, 136.1f, 122.5f}},
+ {{ 34.4f, 32.5f, 29.3f},{ 68.8f, 65.0f, 58.5f},{ 144.1f, 136.1f, 122.5f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 137.6f, 130.0f, 117.0f},{ 275.3f, 260.0f, 234.0f},{ 576.5f, 544.4f, 490.0f},{ 1152.9f, 1088.9f, 980.0f}},
+ {{ 154.9f, 146.3f, 131.6f},{ 309.7f, 292.5f, 263.3f},{ 648.5f, 612.5f, 551.3f},{ 1297.1f, 1225.0f, 1102.5f}},
+ {{ 172.1f, 162.5f, 146.3f},{ 344.1f, 325.0f, 292.5f},{ 720.6f, 680.6f, 612.5f},{ 1441.2f, 1361.1f, 1225.0f}},
+ {{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 229.4f, 216.7f, 195.0f},{ 458.8f, 433.3f, 390.0f},{ 960.8f, 907.4f, 816.7f},{ 1921.6f, 1814.8f, 1633.3f}},
+ {{ 258.1f, 243.8f, 219.4f},{ 516.2f, 487.5f, 438.8f},{ 1080.9f, 1020.8f, 918.8f},{ 2161.8f, 2041.7f, 1837.5f}},
+ {{ 286.8f, 270.8f, 243.8f},{ 573.5f, 541.7f, 487.5f},{ 1201.0f, 1134.3f, 1020.8f},{ 2402.0f, 2268.5f, 2041.7f}}
+ },{
+ {{ 25.8f, 24.4f, 21.9f},{ 51.6f, 48.8f, 43.9f},{ 108.1f, 102.1f, 91.9f},{ 216.2f, 204.2f, 183.8f}},
+ {{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 77.4f, 73.1f, 65.8f},{ 154.9f, 146.3f, 131.6f},{ 324.3f, 306.3f, 275.6f},{ 648.5f, 612.5f, 551.3f}},
+ {{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 154.9f, 146.3f, 131.6f},{ 309.7f, 292.5f, 263.3f},{ 648.5f, 612.5f, 551.3f},{ 1297.1f, 1225.0f, 1102.5f}},
+ {{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 232.3f, 219.4f, 197.4f},{ 464.6f, 438.8f, 394.9f},{ 972.8f, 918.8f, 826.9f},{ 1945.6f, 1837.5f, 1653.8f}},
+ {{ 258.1f, 243.8f, 219.4f},{ 516.2f, 487.5f, 438.8f},{ 1080.9f, 1020.8f, 918.8f},{ 2161.8f, 2041.7f, 1837.5f}},
+ {{ 309.7f, 292.5f, 263.3f},{ 619.4f, 585.0f, 526.5f},{ 1297.1f, 1225.0f, 1102.5f},{ 2594.1f, 2450.0f, 2205.0f}},
+ {{ 344.1f, 325.0f, 292.5f},{ 688.2f, 650.0f, 585.0f},{ 1441.2f, 1361.1f, 1225.0f},{ 2882.4f, 2722.2f, 2450.0f}},
+ {{ 387.1f, 365.6f, 329.1f},{ 774.3f, 731.3f, 658.1f},{ 1621.3f, 1531.3f, 1378.1f},{ 3242.6f, 3062.5f, 2756.3f}},
+ {{ 430.1f, 406.3f, 365.6f},{ 860.3f, 812.5f, 731.3f},{ 1801.5f, 1701.4f, 1531.3f},{ 3602.9f, 3402.8f, 3062.5f}}
+ },{
+ {{ 34.4f, 32.5f, 29.3f},{ 68.8f, 65.0f, 58.5f},{ 144.1f, 136.1f, 122.5f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 137.6f, 130.0f, 117.0f},{ 275.3f, 260.0f, 234.0f},{ 576.5f, 544.4f, 490.0f},{ 1152.9f, 1088.9f, 980.0f}},
+ {{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 275.3f, 260.0f, 234.0f},{ 550.6f, 520.0f, 468.0f},{ 1152.9f, 1088.9f, 980.0f},{ 2305.9f, 2177.8f, 1960.0f}},
+ {{ 309.7f, 292.5f, 263.3f},{ 619.4f, 585.0f, 526.5f},{ 1297.1f, 1225.0f, 1102.5f},{ 2594.1f, 2450.0f, 2205.0f}},
+ {{ 344.1f, 325.0f, 292.5f},{ 688.2f, 650.0f, 585.0f},{ 1441.2f, 1361.1f, 1225.0f},{ 2882.4f, 2722.2f, 2450.0f}},
+ {{ 412.9f, 390.0f, 351.0f},{ 825.9f, 780.0f, 702.0f},{ 1729.4f, 1633.3f, 1470.0f},{ 3458.8f, 3266.7f, 2940.0f}},
+ {{ 458.8f, 433.3f, 390.0f},{ 917.6f, 866.7f, 780.0f},{ 1921.6f, 1814.8f, 1633.3f},{ 3843.1f, 3629.6f, 3266.7f}},
+ {{ 516.2f, 487.5f, 438.8f},{ 1032.4f, 975.0f, 877.5f},{ 2161.8f, 2041.7f, 1837.5f},{ 4323.5f, 4083.3f, 3675.0f}},
+ {{ 573.5f, 541.7f, 487.5f},{ 1147.1f, 1083.3f, 975.0f},{ 2402.0f, 2268.5f, 2041.7f},{ 4803.9f, 4537.0f, 4083.3f}}
+ },{
+ {{ 43.0f, 40.6f, 36.6f},{ 86.0f, 81.3f, 73.1f},{ 180.1f, 170.1f, 153.1f},{ 360.3f, 340.3f, 306.3f}},
+ {{ 86.0f, 81.3f, 73.1f},{ 172.1f, 162.5f, 146.3f},{ 360.3f, 340.3f, 306.3f},{ 720.6f, 680.6f, 612.5f}},
+ {{ 129.0f, 121.9f, 109.7f},{ 258.1f, 243.8f, 219.4f},{ 540.4f, 510.4f, 459.4f},{ 1080.9f, 1020.8f, 918.8f}},
+ {{ 172.1f, 162.5f, 146.3f},{ 344.1f, 325.0f, 292.5f},{ 720.6f, 680.6f, 612.5f},{ 1441.2f, 1361.1f, 1225.0f}},
+ {{ 258.1f, 243.8f, 219.4f},{ 516.2f, 487.5f, 438.8f},{ 1080.9f, 1020.8f, 918.8f},{ 2161.8f, 2041.7f, 1837.5f}},
+ {{ 344.1f, 325.0f, 292.5f},{ 688.2f, 650.0f, 585.0f},{ 1441.2f, 1361.1f, 1225.0f},{ 2882.4f, 2722.2f, 2450.0f}},
+ {{ 387.1f, 365.6f, 329.1f},{ 774.3f, 731.3f, 658.1f},{ 1621.3f, 1531.3f, 1378.1f},{ 3242.6f, 3062.5f, 2756.3f}},
+ {{ 430.1f, 406.3f, 365.6f},{ 860.3f, 812.5f, 731.3f},{ 1801.5f, 1701.4f, 1531.3f},{ 3602.9f, 3402.8f, 3062.5f}},
+ {{ 516.2f, 487.5f, 438.8f},{ 1032.4f, 975.0f, 877.5f},{ 2161.8f, 2041.7f, 1837.5f},{ 4323.5f, 4083.3f, 3675.0f}},
+ {{ 573.5f, 541.7f, 487.5f},{ 1147.1f, 1083.3f, 975.0f},{ 2402.0f, 2268.5f, 2041.7f},{ 4803.9f, 4537.0f, 4083.3f}},
+ {{ 645.2f, 609.4f, 548.4f},{ 1290.4f, 1218.8f, 1096.9f},{ 2702.2f, 2552.1f, 2296.9f},{ 5404.4f, 5104.2f, 4593.8f}},
+ {{ 716.9f, 677.1f, 609.4f},{ 1433.8f, 1354.2f, 1218.8f},{ 3002.5f, 2835.6f, 2552.1f},{ 6004.9f, 5671.3f, 5104.2f}}
+ },{
+ {{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 154.9f, 146.3f, 131.6f},{ 309.7f, 292.5f, 263.3f},{ 648.5f, 612.5f, 551.3f},{ 1297.1f, 1225.0f, 1102.5f}},
+ {{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 309.7f, 292.5f, 263.3f},{ 619.4f, 585.0f, 526.5f},{ 1297.1f, 1225.0f, 1102.5f},{ 2594.1f, 2450.0f, 2205.0f}},
+ {{ 412.9f, 390.0f, 351.0f},{ 825.9f, 780.0f, 702.0f},{ 1729.4f, 1633.3f, 1470.0f},{ 3458.8f, 3266.7f, 2940.0f}},
+ {{ 464.6f, 438.8f, 394.9f},{ 929.1f, 877.5f, 789.8f},{ 1945.6f, 1837.5f, 1653.8f},{ 3891.2f, 3675.0f, 3307.5f}},
+ {{ 516.2f, 487.5f, 438.8f},{ 1032.4f, 975.0f, 877.5f},{ 2161.8f, 2041.7f, 1837.5f},{ 4323.5f, 4083.3f, 3675.0f}},
+ {{ 619.4f, 585.0f, 526.5f},{ 1238.8f, 1170.0f, 1053.0f},{ 2594.1f, 2450.0f, 2205.0f},{ 5188.2f, 4900.0f, 4410.0f}},
+ {{ 688.2f, 650.0f, 585.0f},{ 1376.5f, 1300.0f, 1170.0f},{ 2882.4f, 2722.2f, 2450.0f},{ 5764.7f, 5444.4f, 4900.0f}},
+ {{ 774.3f, 731.3f, 658.1f},{ 1548.5f, 1462.5f, 1316.3f},{ 3242.6f, 3062.5f, 2756.3f},{ 6485.3f, 6125.0f, 5512.5f}},
+ {{ 860.3f, 812.5f, 731.3f},{ 1720.6f, 1625.0f, 1462.5f},{ 3602.9f, 3402.8f, 3062.5f},{ 7205.9f, 6805.6f, 6125.0f}}
+ },{
+ {{ 60.2f, 56.9f, 51.2f},{ 120.4f, 113.8f, 102.4f},{ 252.2f, 238.2f, 214.4f},{ 504.4f, 476.4f, 428.8f}},
+ {{ 120.4f, 113.8f, 102.4f},{ 240.9f, 227.5f, 204.8f},{ 504.4f, 476.4f, 428.8f},{ 1008.8f, 952.8f, 857.5f}},
+ {{ 180.7f, 170.6f, 153.6f},{ 361.3f, 341.3f, 307.1f},{ 756.6f, 714.6f, 643.1f},{ 1513.2f, 1429.2f, 1286.3f}},
+ {{ 240.9f, 227.5f, 204.8f},{ 481.8f, 455.0f, 409.5f},{ 1008.8f, 952.8f, 857.5f},{ 2017.6f, 1905.6f, 1715.0f}},
+ {{ 361.3f, 341.3f, 307.1f},{ 722.6f, 682.5f, 614.3f},{ 1513.2f, 1429.2f, 1286.3f},{ 3026.5f, 2858.3f, 2572.5f}},
+ {{ 481.8f, 455.0f, 409.5f},{ 963.5f, 910.0f, 819.0f},{ 2017.6f, 1905.6f, 1715.0f},{ 4035.3f, 3811.1f, 3430.0f}},
+ {{ 542.0f, 511.9f, 460.7f},{ 1084.0f, 1023.8f, 921.4f},{ 2269.9f, 2143.8f, 1929.4f},{ 4539.7f, 4287.5f, 3858.8f}},
+ {{ 602.2f, 568.8f, 511.9f},{ 1204.4f, 1137.5f, 1023.8f},{ 2522.1f, 2381.9f, 2143.8f},{ 5044.1f, 4763.9f, 4287.5f}},
+ {{ 722.6f, 682.5f, 614.3f},{ 1445.3f, 1365.0f, 1228.5f},{ 3026.5f, 2858.3f, 2572.5f},{ 6052.9f, 5716.7f, 5145.0f}},
+ {{ 802.9f, 758.3f, 682.5f},{ 1605.9f, 1516.7f, 1365.0f},{ 3362.7f, 3175.9f, 2858.3f},{ 6725.5f, 6351.9f, 5716.7f}},
+ {{ 903.3f, 853.1f, 767.8f},{ 1806.6f, 1706.3f, 1535.6f},{ 3783.1f, 3572.9f, 3215.6f},{ 7566.2f, 7145.8f, 6431.3f}},
+ {{ 1003.7f, 947.9f, 853.1f},{ 2007.4f, 1895.8f, 1706.3f},{ 4203.4f, 3969.9f, 3572.9f},{ 8406.9f, 7939.8f, 7145.8f}}
+ },{
+ {{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 137.6f, 130.0f, 117.0f},{ 275.3f, 260.0f, 234.0f},{ 576.5f, 544.4f, 490.0f},{ 1152.9f, 1088.9f, 980.0f}},
+ {{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 275.3f, 260.0f, 234.0f},{ 550.6f, 520.0f, 468.0f},{ 1152.9f, 1088.9f, 980.0f},{ 2305.9f, 2177.8f, 1960.0f}},
+ {{ 412.9f, 390.0f, 351.0f},{ 825.9f, 780.0f, 702.0f},{ 1729.4f, 1633.3f, 1470.0f},{ 3458.8f, 3266.7f, 2940.0f}},
+ {{ 550.6f, 520.0f, 468.0f},{ 1101.2f, 1040.0f, 936.0f},{ 2305.9f, 2177.8f, 1960.0f},{ 4611.8f, 4355.6f, 3920.0f}},
+ {{ 619.4f, 585.0f, 526.5f},{ 1238.8f, 1170.0f, 1053.0f},{ 2594.1f, 2450.0f, 2205.0f},{ 5188.2f, 4900.0f, 4410.0f}},
+ {{ 688.2f, 650.0f, 585.0f},{ 1376.5f, 1300.0f, 1170.0f},{ 2882.4f, 2722.2f, 2450.0f},{ 5764.7f, 5444.4f, 4900.0f}},
+ {{ 825.9f, 780.0f, 702.0f},{ 1651.8f, 1560.0f, 1404.0f},{ 3458.8f, 3266.7f, 2940.0f},{ 6917.6f, 6533.3f, 5880.0f}},
+ {{ 917.6f, 866.7f, 780.0f},{ 1835.3f, 1733.3f, 1560.0f},{ 3843.1f, 3629.6f, 3266.7f},{ 7686.3f, 7259.3f, 6533.3f}},
+ {{ 1032.4f, 975.0f, 877.5f},{ 2064.7f, 1950.0f, 1755.0f},{ 4323.5f, 4083.3f, 3675.0f},{ 8647.1f, 8166.7f, 7350.0f}},
+ {{ 1147.1f, 1083.3f, 975.0f},{ 2294.1f, 2166.7f, 1950.0f},{ 4803.9f, 4537.0f, 4083.3f},{ 9607.8f, 9074.1f, 8166.7f}}
+ }
+};
+
+/*
+ * Calculates 802.11ax HE SU data rate corresponding to a given 802.11ax MCS index,
+ * bandwidth, and guard interval.
+ */
+static float ieee80211_he_ofdm_rate(guint nsts, guint mcs, guint bw, guint gi)
+{
+ float rate=0.0;
+ if ( ((nsts-1) < HE_MAX_NSTS) && (mcs < HE_MAX_MCS) && ( bw < HE_SU_MAX_BW) && ( gi < HE_MAX_GI ) ) {
+ rate = he_ofdm_tab[nsts-1][mcs][bw][gi];
+ }
+ return rate;
+}
+
+/*
+ * HE MU OFDMA MCS rate table converted from http://mcsindex.com/
+ * indexed by (NSTS,MCS,RU,GI)
+ */
+#define HE_MU_MAX_RU 6
+static float he_mu_ofdma_tab[HE_MAX_NSTS][HE_MAX_MCS][HE_MU_MAX_RU][HE_MAX_GI] = {
+ {
+ {{ 0.9f, 0.8f, 0.8f},{ 1.8f, 1.7f, 1.5f},{ 3.8f, 3.5f, 3.2f},{ 8.6f, 8.1f, 7.3f},{ 17.2f, 16.3f, 14.6f},{ 36.0f, 34.0f, 30.6f}},
+ {{ 1.8f, 1.7f, 1.5f},{ 3.5f, 3.3f, 3.0f},{ 7.5f, 7.1f, 6.4f},{ 17.2f, 16.3f, 14.6f},{ 34.4f, 32.5f, 29.3f},{ 72.1f, 68.1f, 61.3f}},
+ {{ 2.6f, 2.5f, 2.3f},{ 5.3f, 5.0f, 4.5f},{ 11.3f, 10.6f, 9.6f},{ 25.8f, 24.4f, 21.9f},{ 51.6f, 48.8f, 43.9f},{ 108.1f, 102.1f, 91.9f}},
+ {{ 3.5f, 3.3f, 3.0f},{ 7.1f, 6.7f, 6.0f},{ 15.0f, 14.2f, 12.8f},{ 34.4f, 32.5f, 29.3f},{ 68.8f, 65.0f, 58.5f},{ 144.1f, 136.1f, 122.5f}},
+ {{ 5.3f, 5.0f, 4.5f},{ 10.6f, 10.0f, 9.0f},{ 22.5f, 21.3f, 19.1f},{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f}},
+ {{ 7.1f, 6.7f, 6.0f},{ 14.1f, 13.3f, 12.0f},{ 30.0f, 28.3f, 25.5f},{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 7.9f, 7.5f, 6.8f},{ 15.9f, 15.0f, 13.5f},{ 33.8f, 31.9f, 28.7f},{ 77.4f, 73.1f, 65.8f},{ 154.9f, 146.3f, 131.6f},{ 324.3f, 306.3f, 275.6f}},
+ {{ 8.8f, 8.3f, 7.5f},{ 17.6f, 16.7f, 15.0f},{ 37.5f, 35.4f, 31.9f},{ 86.0f, 81.3f, 73.1f},{ 172.1f, 162.5f, 146.3f},{ 360.3f, 340.3f, 306.3f}},
+ {{ 10.6f, 10.0f, 9.0f},{ 21.2f, 20.0f, 18.0f},{ 45.0f, 42.5f, 38.3f},{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 11.8f, 11.1f, 10.0f},{ 23.5f, 22.2f, 20.0f},{ 50.0f, 47.2f, 42.5f},{ 114.7f, 108.3f, 97.5f},{ 229.4f, 216.7f, 195.0f},{ 480.4f, 453.7f, 408.3f}},
+ {{ 13.2f, 12.5f, 11.3f},{ 26.5f, 25.0f, 22.5f},{ 56.3f, 53.1f, 47.8f},{ 129.0f, 121.9f, 109.7f},{ 258.1f, 243.8f, 219.4f},{ 540.4f, 510.4f, 459.4f}},
+ {{ 14.7f, 13.9f, 12.5f},{ 29.4f, 27.8f, 25.0f},{ 62.5f, 59.0f, 53.1f},{ 143.4f, 135.4f, 121.9f},{ 286.8f, 270.8f, 243.8f},{ 600.5f, 567.1f, 510.4f}}
+ },{
+ {{ 1.8f, 1.7f, 1.5f},{ 3.5f, 3.3f, 3.0f},{ 7.5f, 7.1f, 6.4f},{ 17.2f, 16.3f, 14.6f},{ 34.4f, 32.5f, 29.3f},{ 72.1f, 68.1f, 61.3f}},
+ {{ 3.5f, 3.3f, 3.0f},{ 7.1f, 6.7f, 6.0f},{ 15.0f, 14.2f, 12.8f},{ 34.4f, 32.5f, 29.3f},{ 68.8f, 65.0f, 58.5f},{ 144.1f, 136.1f, 122.5f}},
+ {{ 5.3f, 5.0f, 4.5f},{ 10.6f, 10.0f, 9.0f},{ 22.5f, 21.3f, 19.1f},{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f}},
+ {{ 7.1f, 6.7f, 6.0f},{ 14.1f, 13.3f, 12.0f},{ 30.0f, 28.3f, 25.5f},{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 10.6f, 10.0f, 9.0f},{ 21.2f, 20.0f, 18.0f},{ 45.0f, 42.5f, 38.3f},{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 14.1f, 13.3f, 12.0f},{ 28.2f, 26.7f, 24.0f},{ 60.0f, 56.7f, 51.0f},{ 137.6f, 130.0f, 117.0f},{ 275.3f, 260.0f, 234.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 15.9f, 15.0f, 13.5f},{ 31.8f, 30.0f, 27.0f},{ 67.5f, 63.8f, 57.4f},{ 154.9f, 146.3f, 131.6f},{ 309.7f, 292.5f, 263.3f},{ 648.5f, 612.5f, 551.3f}},
+ {{ 17.6f, 16.7f, 15.0f},{ 35.3f, 33.3f, 30.0f},{ 75.0f, 70.8f, 63.8f},{ 172.1f, 162.5f, 146.3f},{ 344.1f, 325.0f, 292.5f},{ 720.6f, 680.6f, 612.5f}},
+ {{ 21.2f, 20.0f, 18.0f},{ 42.4f, 40.0f, 36.0f},{ 90.0f, 85.0f, 76.5f},{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 23.5f, 22.2f, 20.0f},{ 47.1f, 44.4f, 40.0f},{ 100.0f, 94.4f, 85.0f},{ 229.4f, 216.7f, 195.0f},{ 458.8f, 433.3f, 390.0f},{ 960.8f, 907.4f, 816.7f}},
+ {{ 26.5f, 25.0f, 22.5f},{ 52.9f, 50.0f, 45.0f},{ 112.5f, 106.3f, 95.6f},{ 258.1f, 243.8f, 219.4f},{ 516.2f, 487.5f, 438.8f},{ 1080.9f, 1020.8f, 918.8f}},
+ {{ 29.4f, 27.8f, 25.0f},{ 58.8f, 55.6f, 50.0f},{ 125.0f, 118.1f, 106.3f},{ 286.8f, 270.8f, 243.8f},{ 573.5f, 541.7f, 487.5f},{ 1201.0f, 1134.3f, 1020.8f}}
+ },{
+ {{ 2.6f, 2.5f, 2.3f},{ 5.3f, 5.0f, 4.5f},{ 11.3f, 10.6f, 9.6f},{ 25.8f, 24.4f, 21.9f},{ 51.6f, 48.8f, 43.9f},{ 108.1f, 102.1f, 91.9f}},
+ {{ 5.3f, 5.0f, 4.5f},{ 10.6f, 10.0f, 9.0f},{ 22.5f, 21.3f, 19.1f},{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f}},
+ {{ 7.9f, 7.5f, 6.8f},{ 15.9f, 15.0f, 13.5f},{ 33.8f, 31.9f, 28.7f},{ 77.4f, 73.1f, 65.8f},{ 154.9f, 146.3f, 131.6f},{ 324.3f, 306.3f, 275.6f}},
+ {{ 10.6f, 10.0f, 9.0f},{ 21.2f, 20.0f, 18.0f},{ 45.0f, 42.5f, 38.3f},{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 15.9f, 15.0f, 13.5f},{ 31.8f, 30.0f, 27.0f},{ 67.5f, 63.8f, 57.4f},{ 154.9f, 146.3f, 131.6f},{ 309.7f, 292.5f, 263.3f},{ 648.5f, 612.5f, 551.3f}},
+ {{ 21.2f, 20.0f, 18.0f},{ 42.4f, 40.0f, 36.0f},{ 90.0f, 85.0f, 76.5f},{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 23.8f, 22.5f, 20.3f},{ 47.6f, 45.0f, 40.5f},{ 101.3f, 95.6f, 86.1f},{ 232.3f, 219.4f, 197.4f},{ 464.6f, 438.8f, 394.9f},{ 972.8f, 918.8f, 826.9f}},
+ {{ 26.5f, 25.0f, 22.5f},{ 52.9f, 50.0f, 45.0f},{ 112.5f, 106.3f, 95.6f},{ 258.1f, 243.8f, 219.4f},{ 516.2f, 487.5f, 438.8f},{ 1080.9f, 1020.8f, 918.8f}},
+ {{ 31.8f, 30.0f, 27.0f},{ 63.5f, 60.0f, 54.0f},{ 135.0f, 127.5f, 114.8f},{ 309.7f, 292.5f, 263.3f},{ 619.4f, 585.0f, 526.5f},{ 1297.1f, 1225.0f, 1102.5f}},
+ {{ 35.3f, 33.3f, 30.0f},{ 70.6f, 66.7f, 60.0f},{ 150.0f, 141.7f, 127.5f},{ 344.1f, 325.0f, 292.5f},{ 688.2f, 650.0f, 585.0f},{ 1441.2f, 1361.1f, 1225.0f}},
+ {{ 39.7f, 37.5f, 33.8f},{ 79.4f, 75.0f, 67.5f},{ 168.8f, 159.4f, 143.4f},{ 387.1f, 365.6f, 329.1f},{ 774.3f, 731.3f, 658.1f},{ 1621.3f, 1531.3f, 1378.1f}},
+ {{ 44.1f, 41.7f, 37.5f},{ 88.2f, 83.3f, 75.0f},{ 187.5f, 177.1f, 159.4f},{ 430.1f, 406.3f, 365.6f},{ 860.3f, 812.5f, 731.3f},{ 1801.5f, 1701.4f, 1531.3f}}
+ },{
+ {{ 3.5f, 3.3f, 3.0f},{ 7.1f, 6.7f, 6.0f},{ 15.0f, 14.2f, 12.8f},{ 34.4f, 32.5f, 29.3f},{ 68.8f, 65.0f, 58.5f},{ 144.1f, 136.1f, 122.5f}},
+ {{ 7.1f, 6.7f, 6.0f},{ 14.1f, 13.3f, 12.0f},{ 30.0f, 28.3f, 25.5f},{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 10.6f, 10.0f, 9.0f},{ 21.2f, 20.0f, 18.0f},{ 45.0f, 42.5f, 38.3f},{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 14.1f, 13.3f, 12.0f},{ 28.2f, 26.7f, 24.0f},{ 60.0f, 56.7f, 51.0f},{ 137.6f, 130.0f, 117.0f},{ 275.3f, 260.0f, 234.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 21.2f, 20.0f, 18.0f},{ 42.4f, 40.0f, 36.0f},{ 90.0f, 85.0f, 76.5f},{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 28.2f, 26.7f, 24.0f},{ 56.5f, 53.3f, 48.0f},{ 120.0f, 113.3f, 102.0f},{ 275.3f, 260.0f, 234.0f},{ 550.6f, 520.0f, 468.0f},{ 1152.9f, 1088.9f, 980.0f}},
+ {{ 31.8f, 30.0f, 27.0f},{ 63.5f, 60.0f, 54.0f},{ 135.0f, 127.5f, 114.8f},{ 309.7f, 292.5f, 263.3f},{ 619.4f, 585.0f, 526.5f},{ 1297.1f, 1225.0f, 1102.5f}},
+ {{ 35.3f, 33.3f, 30.0f},{ 70.6f, 66.7f, 60.0f},{ 150.0f, 141.7f, 127.5f},{ 344.1f, 325.0f, 292.5f},{ 688.2f, 650.0f, 585.0f},{ 1441.2f, 1361.1f, 1225.0f}},
+ {{ 42.4f, 40.0f, 36.0f},{ 84.7f, 80.0f, 72.0f},{ 180.0f, 170.0f, 153.0f},{ 412.9f, 390.0f, 351.0f},{ 825.9f, 780.0f, 702.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 47.1f, 44.4f, 40.0f},{ 94.1f, 88.9f, 80.0f},{ 200.0f, 188.9f, 170.0f},{ 458.8f, 433.3f, 390.0f},{ 917.6f, 866.7f, 780.0f},{ 1921.6f, 1814.8f, 1633.3f}},
+ {{ 52.9f, 50.0f, 45.0f},{ 105.9f, 100.0f, 90.0f},{ 225.0f, 212.5f, 191.3f},{ 516.2f, 487.5f, 438.8f},{ 1032.4f, 975.0f, 877.5f},{ 2161.8f, 2041.7f, 1837.5f}},
+ {{ 58.8f, 55.6f, 50.0f},{ 117.6f, 111.1f, 100.0f},{ 250.0f, 236.1f, 212.5f},{ 573.5f, 541.7f, 487.5f},{ 1147.1f, 1083.3f, 975.0f},{ 2402.0f, 2268.5f, 2041.7f}}
+ },{
+ {{ 4.4f, 4.2f, 3.8f},{ 8.8f, 8.3f, 7.5f},{ 18.8f, 17.7f, 15.9f},{ 43.0f, 40.6f, 36.6f},{ 86.0f, 81.3f, 73.1f},{ 180.1f, 170.1f, 153.1f}},
+ {{ 8.8f, 8.3f, 7.5f},{ 17.6f, 16.7f, 15.0f},{ 37.5f, 35.4f, 31.9f},{ 86.0f, 81.3f, 73.1f},{ 172.1f, 162.5f, 146.3f},{ 360.3f, 340.3f, 306.3f}},
+ {{ 13.2f, 12.5f, 11.3f},{ 26.5f, 25.0f, 22.5f},{ 56.3f, 53.1f, 47.8f},{ 129.0f, 121.9f, 109.7f},{ 258.1f, 243.8f, 219.4f},{ 540.4f, 510.4f, 459.4f}},
+ {{ 17.6f, 16.7f, 15.0f},{ 35.3f, 33.3f, 30.0f},{ 75.0f, 70.8f, 63.8f},{ 172.1f, 162.5f, 146.3f},{ 344.1f, 325.0f, 292.5f},{ 720.6f, 680.6f, 612.5f}},
+ {{ 26.5f, 25.0f, 22.5f},{ 52.9f, 50.0f, 45.0f},{ 112.5f, 106.3f, 95.6f},{ 258.1f, 243.8f, 219.4f},{ 516.2f, 487.5f, 438.8f},{ 1080.9f, 1020.8f, 918.8f}},
+ {{ 35.3f, 33.3f, 30.0f},{ 70.6f, 66.7f, 60.0f},{ 150.0f, 141.7f, 127.5f},{ 344.1f, 325.0f, 292.5f},{ 688.2f, 650.0f, 585.0f},{ 1441.2f, 1361.1f, 1225.0f}},
+ {{ 39.7f, 37.5f, 33.8f},{ 79.4f, 75.0f, 67.5f},{ 168.8f, 159.4f, 143.4f},{ 387.1f, 365.6f, 329.1f},{ 774.3f, 731.3f, 658.1f},{ 1621.3f, 1531.3f, 1378.1f}},
+ {{ 44.1f, 41.7f, 37.5f},{ 88.2f, 83.3f, 75.0f},{ 187.5f, 177.1f, 159.4f},{ 430.1f, 406.3f, 365.6f},{ 860.3f, 812.5f, 731.3f},{ 1801.5f, 1701.4f, 1531.3f}},
+ {{ 52.9f, 50.0f, 45.0f},{ 105.9f, 100.0f, 90.0f},{ 225.0f, 212.5f, 191.3f},{ 516.2f, 487.5f, 438.8f},{ 1032.4f, 975.0f, 877.5f},{ 2161.8f, 2041.7f, 1837.5f}},
+ {{ 58.8f, 55.6f, 50.0f},{ 117.6f, 111.1f, 100.0f},{ 250.0f, 236.1f, 212.5f},{ 573.5f, 541.7f, 487.5f},{ 1147.1f, 1083.3f, 975.0f},{ 2402.0f, 2268.5f, 2041.7f}},
+ {{ 66.2f, 62.5f, 56.3f},{ 132.4f, 125.0f, 112.5f},{ 281.3f, 265.6f, 239.1f},{ 645.2f, 609.4f, 548.4f},{ 1290.4f, 1218.8f, 1096.9f},{ 2702.2f, 2552.1f, 2296.9f}},
+ {{ 73.5f, 69.4f, 62.5f},{ 147.1f, 138.9f, 125.0f},{ 312.5f, 295.1f, 265.6f},{ 716.9f, 677.1f, 609.4f},{ 1433.8f, 1354.2f, 1218.8f},{ 3002.5f, 2835.6f, 2552.1f}}
+ },{
+ {{ 5.3f, 5.0f, 4.5f},{ 10.6f, 10.0f, 9.0f},{ 22.5f, 21.3f, 19.1f},{ 51.6f, 48.8f, 43.9f},{ 103.2f, 97.5f, 87.8f},{ 216.2f, 204.2f, 183.8f}},
+ {{ 10.6f, 10.0f, 9.0f},{ 21.2f, 20.0f, 18.0f},{ 45.0f, 42.5f, 38.3f},{ 103.2f, 97.5f, 87.8f},{ 206.5f, 195.0f, 175.5f},{ 432.4f, 408.3f, 367.5f}},
+ {{ 15.9f, 15.0f, 13.5f},{ 31.8f, 30.0f, 27.0f},{ 67.5f, 63.8f, 57.4f},{ 154.9f, 146.3f, 131.6f},{ 309.7f, 292.5f, 263.3f},{ 648.5f, 612.5f, 551.3f}},
+ {{ 21.2f, 20.0f, 18.0f},{ 42.4f, 40.0f, 36.0f},{ 90.0f, 85.0f, 76.5f},{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 31.8f, 30.0f, 27.0f},{ 63.5f, 60.0f, 54.0f},{ 135.0f, 127.5f, 114.8f},{ 309.7f, 292.5f, 263.3f},{ 619.4f, 585.0f, 526.5f},{ 1297.1f, 1225.0f, 1102.5f}},
+ {{ 42.4f, 40.0f, 36.0f},{ 84.7f, 80.0f, 72.0f},{ 180.0f, 170.0f, 153.0f},{ 412.9f, 390.0f, 351.0f},{ 825.9f, 780.0f, 702.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 47.6f, 45.0f, 40.5f},{ 95.3f, 90.0f, 81.0f},{ 202.5f, 191.3f, 172.1f},{ 464.6f, 438.8f, 394.9f},{ 929.1f, 877.5f, 789.8f},{ 1945.6f, 1837.5f, 1653.8f}},
+ {{ 52.9f, 50.0f, 45.0f},{ 105.9f, 100.0f, 90.0f},{ 225.0f, 212.5f, 191.3f},{ 516.2f, 487.5f, 438.8f},{ 1032.4f, 975.0f, 877.5f},{ 2161.8f, 2041.7f, 1837.5f}},
+ {{ 63.5f, 60.0f, 54.0f},{ 127.1f, 120.0f, 108.0f},{ 270.0f, 255.0f, 229.5f},{ 619.4f, 585.0f, 526.5f},{ 1238.8f, 1170.0f, 1053.0f},{ 2594.1f, 2450.0f, 2205.0f}},
+ {{ 70.6f, 66.7f, 60.0f},{ 141.2f, 133.3f, 120.0f},{ 300.0f, 283.3f, 255.0f},{ 688.2f, 650.0f, 585.0f},{ 1376.5f, 1300.0f, 1170.0f},{ 2882.4f, 2722.2f, 2450.0f}},
+ {{ 79.4f, 75.0f, 67.5f},{ 158.8f, 150.0f, 135.0f},{ 337.5f, 318.8f, 286.9f},{ 774.3f, 731.3f, 658.1f},{ 1548.5f, 1462.5f, 1316.3f},{ 3242.6f, 3062.5f, 2756.3f}},
+ {{ 88.2f, 83.3f, 75.0f},{ 176.5f, 166.7f, 150.0f},{ 375.0f, 354.2f, 318.8f},{ 860.3f, 812.5f, 731.3f},{ 1720.6f, 1625.0f, 1462.5f},{ 3602.9f, 3402.8f, 3062.5f}}
+ },{
+ {{ 6.2f, 5.8f, 5.3f},{ 12.4f, 11.7f, 10.5f},{ 26.3f, 24.8f, 22.3f},{ 60.2f, 56.9f, 51.2f},{ 120.4f, 113.8f, 102.4f},{ 252.2f, 238.2f, 214.4f}},
+ {{ 12.4f, 11.7f, 10.5f},{ 24.7f, 23.3f, 21.0f},{ 52.5f, 49.6f, 44.6f},{ 120.4f, 113.8f, 102.4f},{ 240.9f, 227.5f, 204.8f},{ 504.4f, 476.4f, 428.8f}},
+ {{ 18.5f, 17.5f, 15.8f},{ 37.1f, 35.0f, 31.5f},{ 78.8f, 74.4f, 66.9f},{ 180.7f, 170.6f, 153.6f},{ 361.3f, 341.3f, 307.1f},{ 756.6f, 714.6f, 643.1f}},
+ {{ 24.7f, 23.3f, 21.0f},{ 49.4f, 46.7f, 42.0f},{ 105.0f, 99.2f, 89.3f},{ 240.9f, 227.5f, 204.8f},{ 481.8f, 455.0f, 409.5f},{ 1008.8f, 952.8f, 857.5f}},
+ {{ 37.1f, 35.0f, 31.5f},{ 74.1f, 70.0f, 63.0f},{ 157.5f, 148.8f, 133.9f},{ 361.3f, 341.3f, 307.1f},{ 722.6f, 682.5f, 614.3f},{ 1513.2f, 1429.2f, 1286.3f}},
+ {{ 49.4f, 46.7f, 42.0f},{ 98.8f, 93.3f, 84.0f},{ 210.0f, 198.3f, 178.5f},{ 481.8f, 455.0f, 409.5f},{ 963.5f, 910.0f, 819.0f},{ 2017.6f, 1905.6f, 1715.0f}},
+ {{ 55.6f, 52.5f, 47.3f},{ 111.2f, 105.0f, 94.5f},{ 236.3f, 223.1f, 200.8f},{ 542.0f, 511.9f, 460.7f},{ 1084.0f, 1023.8f, 921.4f},{ 2269.9f, 2143.8f, 1929.4f}},
+ {{ 61.8f, 58.3f, 52.5f},{ 123.5f, 116.7f, 105.0f},{ 262.5f, 247.9f, 223.1f},{ 602.2f, 568.8f, 511.9f},{ 1204.4f, 1137.5f, 1023.8f},{ 2522.1f, 2381.9f, 2143.8f}},
+ {{ 74.1f, 70.0f, 63.0f},{ 148.2f, 140.0f, 126.0f},{ 315.0f, 297.5f, 267.8f},{ 722.6f, 682.5f, 614.3f},{ 1445.3f, 1365.0f, 1228.5f},{ 3026.5f, 2858.3f, 2572.5f}},
+ {{ 82.4f, 77.8f, 70.0f},{ 164.7f, 155.6f, 140.0f},{ 350.0f, 330.6f, 297.5f},{ 802.9f, 758.3f, 682.5f},{ 1605.9f, 1516.7f, 1365.0f},{ 3362.7f, 3175.9f, 2858.3f}},
+ {{ 92.6f, 87.5f, 78.8f},{ 185.3f, 175.0f, 157.5f},{ 393.8f, 371.9f, 334.7f},{ 903.3f, 853.1f, 767.8f},{ 1806.6f, 1706.3f, 1535.6f},{ 3783.1f, 3572.9f, 3215.6f}},
+ {{ 102.9f, 97.2f, 87.5f},{ 205.9f, 194.4f, 175.0f},{ 437.5f, 413.2f, 371.9f},{ 1003.7f, 947.9f, 853.1f},{ 2007.4f, 1895.8f, 1706.3f},{ 4203.4f, 3969.9f, 3572.9f}}
+ },{
+ {{ 7.1f, 6.7f, 6.0f},{ 14.1f, 13.3f, 12.0f},{ 30.0f, 28.3f, 25.5f},{ 68.8f, 65.0f, 58.5f},{ 137.6f, 130.0f, 117.0f},{ 288.2f, 272.2f, 245.0f}},
+ {{ 14.1f, 13.3f, 12.0f},{ 28.2f, 26.7f, 24.0f},{ 60.0f, 56.7f, 51.0f},{ 137.6f, 130.0f, 117.0f},{ 275.3f, 260.0f, 234.0f},{ 576.5f, 544.4f, 490.0f}},
+ {{ 21.2f, 20.0f, 18.0f},{ 42.4f, 40.0f, 36.0f},{ 90.0f, 85.0f, 76.5f},{ 206.5f, 195.0f, 175.5f},{ 412.9f, 390.0f, 351.0f},{ 864.7f, 816.7f, 735.0f}},
+ {{ 28.2f, 26.7f, 24.0f},{ 56.5f, 53.3f, 48.0f},{ 120.0f, 113.3f, 102.0f},{ 275.3f, 260.0f, 234.0f},{ 550.6f, 520.0f, 468.0f},{ 1152.9f, 1088.9f, 980.0f}},
+ {{ 42.4f, 40.0f, 36.0f},{ 84.7f, 80.0f, 72.0f},{ 180.0f, 170.0f, 153.0f},{ 412.9f, 390.0f, 351.0f},{ 825.9f, 780.0f, 702.0f},{ 1729.4f, 1633.3f, 1470.0f}},
+ {{ 56.5f, 53.3f, 48.0f},{ 112.9f, 106.7f, 96.0f},{ 240.0f, 226.7f, 204.0f},{ 550.6f, 520.0f, 468.0f},{ 1101.2f, 1040.0f, 936.0f},{ 2305.9f, 2177.8f, 1960.0f}},
+ {{ 63.5f, 60.0f, 54.0f},{ 127.1f, 120.0f, 108.0f},{ 270.0f, 255.0f, 229.5f},{ 619.4f, 585.0f, 526.5f},{ 1238.8f, 1170.0f, 1053.0f},{ 2594.1f, 2450.0f, 2205.0f}},
+ {{ 70.6f, 66.7f, 60.0f},{ 141.2f, 133.3f, 120.0f},{ 300.0f, 283.3f, 255.0f},{ 688.2f, 650.0f, 585.0f},{ 1376.5f, 1300.0f, 1170.0f},{ 2882.4f, 2722.2f, 2450.0f}},
+ {{ 84.7f, 80.0f, 72.0f},{ 169.4f, 160.0f, 144.0f},{ 360.0f, 340.0f, 306.0f},{ 825.9f, 780.0f, 702.0f},{ 1651.8f, 1560.0f, 1404.0f},{ 3458.8f, 3266.7f, 2940.0f}},
+ {{ 94.1f, 88.9f, 80.0f},{ 188.2f, 177.8f, 160.0f},{ 400.0f, 377.8f, 340.0f},{ 917.6f, 866.7f, 780.0f},{ 1835.3f, 1733.3f, 1560.0f},{ 3843.1f, 3629.6f, 3266.7f}},
+ {{ 105.9f, 100.0f, 90.0f},{ 211.8f, 200.0f, 180.0f},{ 450.0f, 425.0f, 382.5f},{ 1032.4f, 975.0f, 877.5f},{ 2064.7f, 1950.0f, 1755.0f},{ 4323.5f, 4083.3f, 3675.0f}},
+ {{ 117.6f, 111.1f, 100.0f},{ 235.3f, 222.2f, 200.0f},{ 500.0f, 472.2f, 425.0f},{ 1147.1f, 1083.3f, 975.0f},{ 2294.1f, 2166.7f, 1950.0f},{ 4803.9f, 4537.0f, 4083.3f}}
+ }
+
+};
+
+/*
+ * Calculates 802.11ax HE SU data rate corresponding to a given 802.11ax MCS index,
+ * bandwidth, and guard interval.
+ */
+static float ieee80211_he_mu_ofdma_rate(guint nsts, guint mcs, guint ru, guint gi)
+{
+ float rate=0.0;
+ if ( ((nsts-1) < HE_MAX_NSTS) && (mcs < HE_MAX_MCS) && ( (ru-4) < HE_MU_MAX_RU) && ( gi < HE_MAX_GI ) ) {
+ rate = he_mu_ofdma_tab[nsts-1][mcs][ru-4][gi];
+ }
+ return rate;
+}
+
static gint ett_wlan_radio = -1;
static gint ett_wlan_radio_11ac_user = -1;
static gint ett_wlan_radio_duration = -1;
@@ -830,6 +1087,24 @@ dissect_wlan_radio_phdr(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree,
}
}
break;
+ case PHDR_802_11_PHY_11AX:
+ {
+ struct ieee_802_11ax *info_ax = &phy_info->info_11ax;
+ if (info_ax->has_gi && info_ax->has_bwru && info_ax->has_mcs_index) {
+ if (info_ax->bwru < HE_SU_MAX_BW) {
+ data_rate = ieee80211_he_ofdm_rate(info_ax->nsts,info_ax->mcs,info_ax->bwru,info_ax->gi);
+ } else {
+ data_rate = ieee80211_he_mu_ofdma_rate(info_ax->nsts,info_ax->mcs,info_ax->bwru,info_ax->gi);
+ }
+ if (data_rate != 0.0f) {
+ proto_tree_add_float_format_value(radio_tree, hf_wlan_radio_data_rate, tvb, 0, 0,
+ data_rate,
+ "%.1f Mb/s",
+ data_rate);
+ }
+ }
+ }
+ break;
}
}
diff --git a/epan/dissectors/packet-ieee80211-radiotap.c b/epan/dissectors/packet-ieee80211-radiotap.c
index bf30e5717b..a8625bf26e 100644
--- a/epan/dissectors/packet-ieee80211-radiotap.c
+++ b/epan/dissectors/packet-ieee80211-radiotap.c
@@ -1016,7 +1016,7 @@ static const value_string he_midamble_periodicity_vals[] = {
static void
dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
- int offset)
+ int offset, struct ieee_802_11ax *info_11ax)
{
guint16 ppdu_format = tvb_get_letohs(tvb, offset) &
IEEE80211_RADIOTAP_HE_PPDU_FORMAT_MASK;
@@ -1045,6 +1045,10 @@ dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
gboolean midamble_periodicity_known = FALSE;
guint16 data1 = tvb_get_letohs(tvb, offset);
guint16 data2 = 0;
+ guint16 data3 = 0;
+ guint16 data5 = 0;
+ guint16 data6 = 0;
+
guint8 ltf_symbol_size = 0;
/*
@@ -1132,6 +1136,11 @@ dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
if (!stbc_known)
data3_headers[7] = &hf_radiotap_he_stbc_unknown;
+ data3 = tvb_get_letohs(tvb, offset);
+ if (data_mcs_known) {
+ info_11ax->has_mcs_index = TRUE;
+ info_11ax->mcs = (data3 & IEEE80211_RADIOTAP_HE_DATA_MCS_MASK) >> 8;
+ }
proto_tree_add_bitmask(he_info_tree, tvb, offset,
hf_radiotap_he_info_data_3, ett_radiotap_he_info_data_3,
data3_headers, ENC_LITTLE_ENDIAN);
@@ -1170,6 +1179,7 @@ dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
data4_he_mu_headers, ENC_LITTLE_ENDIAN);
}
+ //data4 = tvb_get_letohs(tvb, offset);
offset += 2;
/*
@@ -1192,6 +1202,15 @@ dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
data5_headers[6] = &hf_radiotap_txbf_unknown;
if (!pe_disambiguity_known)
data5_headers[7] = &hf_radiotap_pe_disambiguity_unknown;
+ data5 = tvb_get_letohs(tvb, offset);
+ if (gi_known) {
+ info_11ax->has_gi = TRUE;
+ info_11ax->gi = (data5 & IEEE80211_RADIOTAP_HE_GI_MASK) >> 4;
+ }
+ if (data_bw_ru_alloc_known) {
+ info_11ax->has_bwru = TRUE;
+ info_11ax->bwru = (data5 & IEEE80211_RADIOTAP_HE_DATA_BANDWIDTH_RU_ALLOC_MASK);
+ }
proto_tree_add_bitmask(he_info_tree, tvb, offset,
hf_radiotap_he_info_data_5, ett_radiotap_he_info_data_5,
data5_headers, ENC_LITTLE_ENDIAN);
@@ -1206,6 +1225,10 @@ dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
proto_tree_add_bitmask(he_info_tree, tvb, offset,
hf_radiotap_he_info_data_6, ett_radiotap_he_info_data_6,
data6_headers, ENC_LITTLE_ENDIAN);
+ data6 = tvb_get_letohs(tvb, offset);
+
+ info_11ax->nsts = data6 & IEEE80211_RADIOTAP_HE_NSTS_MASK;
+
}
static const int *flags1_headers[] = {
@@ -2944,7 +2967,7 @@ dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* u
* without this field.
*/
phdr.phy = PHDR_802_11_PHY_11AX;
- dissect_radiotap_he_info(tvb, pinfo, radiotap_tree, offset);
+ dissect_radiotap_he_info(tvb, pinfo, radiotap_tree, offset, &phdr.phy_info.info_11ax);
break;
case IEEE80211_RADIOTAP_HE_MU:
dissect_radiotap_he_mu_info(tvb, pinfo, item_tree, offset);
diff --git a/wiretap/wtap.h b/wiretap/wtap.h
index ab931708c8..96fdf722f4 100644
--- a/wiretap/wtap.h
+++ b/wiretap/wtap.h
@@ -806,6 +806,21 @@ struct ieee_802_11ad {
guint8 mcs; /* MCS index */
};
+/*
+ * 802.11ax (HE).
+ */
+struct ieee_802_11ax {
+ /* Which of this information is present? */
+ guint has_mcs_index:1;
+ guint has_bwru:1;
+ guint has_gi:1;
+
+ guint8 nsts:4; /* Number of Space-time Streams */
+ guint8 mcs:4; /* MCS index */
+ guint8 bwru:4; /* Bandwidth/RU allocation */
+ guint8 gi:2; /* Guard Interval */
+};
+
union ieee_802_11_phy_info {
struct ieee_802_11_fhss info_11_fhss;
struct ieee_802_11b info_11b;
@@ -814,6 +829,7 @@ union ieee_802_11_phy_info {
struct ieee_802_11n info_11n;
struct ieee_802_11ac info_11ac;
struct ieee_802_11ad info_11ad;
+ struct ieee_802_11ax info_11ax;
};
struct ieee_802_11_phdr {