From 218a32a6a33bb0239febd8374a8caba97995d6fa Mon Sep 17 00:00:00 2001
From: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
Date: Tue, 17 May 2022 16:31:16 +0200
Subject: [PATCH] wifi_opclass add e4 table

We need this table in case we have opclass
and no channels there - many cases assume
such not added channels as a channnel with
maximum preference.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
---
 src/utils/opclass.c | 251 ++++++++++++++++++++++++++++++++++++++++++++
 src/utils/opclass.h |   3 +-
 2 files changed, 253 insertions(+), 1 deletion(-)

diff --git a/src/utils/opclass.c b/src/utils/opclass.c
index 59b75dd4..a56d7979 100644
--- a/src/utils/opclass.c
+++ b/src/utils/opclass.c
@@ -9,6 +9,257 @@
 #include "debug.h"
 #include "opclass.h"
 
+static const struct wifi_opclass e4 = {
+	.entry_num = 1,
+	.entry = {
+		{
+			.id = 81,
+			.bandwidth = 20,
+			.channel_num = 13,
+			.channel = {
+				{ .channel = 1, .preference = 15 << 4 },
+				{ .channel = 2, .preference = 15 << 4 },
+				{ .channel = 3, .preference = 15 << 4 },
+				{ .channel = 4, .preference = 15 << 4 },
+				{ .channel = 5, .preference = 15 << 4 },
+				{ .channel = 6, .preference = 15 << 4 },
+				{ .channel = 7, .preference = 15 << 4 },
+				{ .channel = 8, .preference = 15 << 4 },
+				{ .channel = 9, .preference = 15 << 4 },
+				{ .channel = 10, .preference = 15 << 4 },
+				{ .channel = 11, .preference = 15 << 4 },
+				{ .channel = 12, .preference = 15 << 4 },
+				{ .channel = 13, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 82,
+			.bandwidth = 20,
+			.channel_num = 1,
+			.channel = {
+				{ .channel = 14, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 83,
+			.bandwidth = 40,
+			.channel_num = 9,
+			.channel = {
+				{ .channel = 1, .preference = 15 << 4 },
+				{ .channel = 2, .preference = 15 << 4 },
+				{ .channel = 3, .preference = 15 << 4 },
+				{ .channel = 4, .preference = 15 << 4 },
+				{ .channel = 5, .preference = 15 << 4 },
+				{ .channel = 6, .preference = 15 << 4 },
+				{ .channel = 7, .preference = 15 << 4 },
+				{ .channel = 8, .preference = 15 << 4 },
+				{ .channel = 9, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 84,
+			.bandwidth = 40,
+			.channel_num = 9,
+			.channel = {
+				{ .channel = 5, .preference = 15 << 4 },
+				{ .channel = 6, .preference = 15 << 4 },
+				{ .channel = 7, .preference = 15 << 4 },
+				{ .channel = 8, .preference = 15 << 4 },
+				{ .channel = 9, .preference = 15 << 4 },
+				{ .channel = 10, .preference = 15 << 4 },
+				{ .channel = 11, .preference = 15 << 4 },
+				{ .channel = 12, .preference = 15 << 4 },
+				{ .channel = 13, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 115,
+			.bandwidth = 20,
+			.channel_num = 4,
+			.channel = {
+				{ .channel = 36, .preference = 15 << 4 },
+				{ .channel = 40, .preference = 15 << 4 },
+				{ .channel = 44, .preference = 15 << 4 },
+				{ .channel = 48, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 116,
+			.bandwidth = 40,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 36, .preference = 15 << 4 },
+				{ .channel = 44, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 117,
+			.bandwidth = 40,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 40, .preference = 15 << 4 },
+				{ .channel = 48, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 118,
+			.bandwidth = 20,
+			.channel_num = 4,
+			.channel = {
+				{ .channel = 52, .preference = 15 << 4 },
+				{ .channel = 56, .preference = 15 << 4 },
+				{ .channel = 60, .preference = 15 << 4 },
+				{ .channel = 64, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 119,
+			.bandwidth = 40,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 52, .preference = 15 << 4 },
+				{ .channel = 60, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 120,
+			.bandwidth = 40,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 56, .preference = 15 << 4 },
+				{ .channel = 64, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 121,
+			.bandwidth = 20,
+			.channel_num = 12,
+			.channel = {
+				{ .channel = 100, .preference = 15 << 4 },
+				{ .channel = 104, .preference = 15 << 4 },
+				{ .channel = 108, .preference = 15 << 4 },
+				{ .channel = 112, .preference = 15 << 4 },
+				{ .channel = 116, .preference = 15 << 4 },
+				{ .channel = 120, .preference = 15 << 4 },
+				{ .channel = 124, .preference = 15 << 4 },
+				{ .channel = 128, .preference = 15 << 4 },
+				{ .channel = 132, .preference = 15 << 4 },
+				{ .channel = 136, .preference = 15 << 4 },
+				{ .channel = 140, .preference = 15 << 4 },
+				{ .channel = 144, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 122,
+			.bandwidth = 40,
+			.channel_num = 6,
+			.channel = {
+				{ .channel = 100, .preference = 15 << 4 },
+				{ .channel = 108, .preference = 15 << 4 },
+				{ .channel = 116, .preference = 15 << 4 },
+				{ .channel = 124, .preference = 15 << 4 },
+				{ .channel = 132, .preference = 15 << 4 },
+				{ .channel = 140, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 123,
+			.bandwidth = 40,
+			.channel_num = 6,
+			.channel = {
+				{ .channel = 104, .preference = 15 << 4 },
+				{ .channel = 112, .preference = 15 << 4 },
+				{ .channel = 120, .preference = 15 << 4 },
+				{ .channel = 128, .preference = 15 << 4 },
+				{ .channel = 136, .preference = 15 << 4 },
+				{ .channel = 144, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 124,
+			.bandwidth = 40,
+			.channel_num = 4,
+			.channel = {
+				{ .channel = 149, .preference = 15 << 4 },
+				{ .channel = 153, .preference = 15 << 4 },
+				{ .channel = 157, .preference = 15 << 4 },
+				{ .channel = 161, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 125,
+			.bandwidth = 20,
+			.channel_num = 6,
+			.channel = {
+				{ .channel = 149, .preference = 15 << 4 },
+				{ .channel = 153, .preference = 15 << 4 },
+				{ .channel = 157, .preference = 15 << 4 },
+				{ .channel = 161, .preference = 15 << 4 },
+				{ .channel = 164, .preference = 15 << 4 },
+				{ .channel = 169, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 126,
+			.bandwidth = 40,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 149, .preference = 15 << 4 },
+				{ .channel = 157, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 127,
+			.bandwidth = 40,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 153, .preference = 15 << 4 },
+				{ .channel = 161, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 128,
+			.bandwidth = 80,
+			.channel_num = 6,
+			.channel = {
+				{ .channel = 42, .preference = 15 << 4 },
+				{ .channel = 58, .preference = 15 << 4 },
+				{ .channel = 106, .preference = 15 << 4 },
+				{ .channel = 122, .preference = 15 << 4 },
+				{ .channel = 138, .preference = 15 << 4 },
+				{ .channel = 155, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 129,
+			.bandwidth = 160,
+			.channel_num = 2,
+			.channel = {
+				{ .channel = 50, .preference = 15 << 4 },
+				{ .channel = 114, .preference = 15 << 4 },
+			}
+		},
+		{
+			.id = 130,
+			.bandwidth = 80,
+			.channel_num = 6,
+			.channel = {
+				{ .channel = 42, .preference = 15 << 4 },
+				{ .channel = 58, .preference = 15 << 4 },
+				{ .channel = 106, .preference = 15 << 4 },
+				{ .channel = 122, .preference = 15 << 4 },
+				{ .channel = 138, .preference = 15 << 4 },
+				{ .channel = 155, .preference = 15 << 4 },
+			}
+		},
+	},
+};
+
+const struct wifi_opclass *wifi_opclass_e4(void)
+{
+	return &e4;
+}
+
 struct wifi_opclass_entry *wifi_opclass_find_entry(struct wifi_opclass *opclass, uint8_t id)
 {
 	struct wifi_opclass_entry *entry;
diff --git a/src/utils/opclass.h b/src/utils/opclass.h
index 25b8e484..90849fea 100644
--- a/src/utils/opclass.h
+++ b/src/utils/opclass.h
@@ -35,6 +35,8 @@ struct wifi_opclass {
 	struct wifi_opclass_entry entry[64];
 };
 
+const struct wifi_opclass *wifi_opclass_e4(void);
+
 struct wifi_opclass_entry *wifi_opclass_find_entry(struct wifi_opclass *opclass, uint8_t id);
 struct wifi_opclass_entry *wifi_opclass_new_entry(struct wifi_opclass *opclass);
 
@@ -50,5 +52,4 @@ void wifi_opclass_dump(struct wifi_opclass *opclass);
 
 uint8_t wifi_opclass_get_id(struct wifi_opclass *opclass, uint8_t channel, int bandwidth);
 bool wifi_opclass_channel_supported(struct wifi_opclass *opclass, uint8_t id, uint8_t channel, int bandwidth);
-
 #endif /* _OPCLASS_H_ */
-- 
GitLab