aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEyal Shapira2012-02-21 16:59:19 -0600
committerEyal Shapira2012-03-15 11:42:16 -0500
commit3a53d2146b13d71ef664ab6bdfdc732594c63f18 (patch)
tree5a1d172bbfdd3c05f2775560810b6e2e52d7ba44
parent6ff736ff8283f60def28740d01ad824fbdc552a3 (diff)
downloadhostap-3a53d2146b13d71ef664ab6bdfdc732594c63f18.tar.gz
hostap-3a53d2146b13d71ef664ab6bdfdc732594c63f18.tar.xz
hostap-3a53d2146b13d71ef664ab6bdfdc732594c63f18.zip
nl80211: Add and align rx filters IDs
Add more patterns (SSDP, ARP, DHCP) and align IDs to a common vendor Android framework implementation. Note that ARP pattern shouldn't be used as our FW responds to ARPs by default without waking up the host. It is added only for ID alignments purposes.
-rw-r--r--src/drivers/driver_nl80211.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index e4072c0a..c9ed051d 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -8777,6 +8777,7 @@ nl80211_self_filter_get_pattern_handler(u8 *buf, int buflen, void *arg)
8777} 8777}
8778 8778
8779static struct rx_filter rx_filters[] = { 8779static struct rx_filter rx_filters[] = {
8780 /* ID 0 */
8780 {.name = "self", 8781 {.name = "self",
8781 .pattern = {}, 8782 .pattern = {},
8782 .pattern_len = 6, 8783 .pattern_len = 6,
@@ -8785,6 +8786,7 @@ static struct rx_filter rx_filters[] = {
8785 .get_pattern_handler = nl80211_self_filter_get_pattern_handler, 8786 .get_pattern_handler = nl80211_self_filter_get_pattern_handler,
8786 }, 8787 },
8787 8788
8789 /* ID 1 */
8788 {.name = "bcast", 8790 {.name = "bcast",
8789 .pattern = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, 8791 .pattern = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
8790 .pattern_len = 6, 8792 .pattern_len = 6,
@@ -8792,6 +8794,7 @@ static struct rx_filter rx_filters[] = {
8792 .mask_len = 1, 8794 .mask_len = 1,
8793 }, 8795 },
8794 8796
8797 /* ID 2 */
8795 {.name = "ipv4mc", 8798 {.name = "ipv4mc",
8796 .pattern = {0x01,0x00,0x5E}, 8799 .pattern = {0x01,0x00,0x5E},
8797 .pattern_len = 3, 8800 .pattern_len = 3,
@@ -8799,6 +8802,7 @@ static struct rx_filter rx_filters[] = {
8799 .mask_len = 1, 8802 .mask_len = 1,
8800 }, 8803 },
8801 8804
8805 /* ID 3 */
8802 {.name = "ipv6mc", 8806 {.name = "ipv6mc",
8803 .pattern = {0x33,0x33}, 8807 .pattern = {0x33,0x33},
8804 .pattern_len = 2, 8808 .pattern_len = 2,
@@ -8806,18 +8810,45 @@ static struct rx_filter rx_filters[] = {
8806 .mask_len = 1, 8810 .mask_len = 1,
8807 }, 8811 },
8808 8812
8813 /* ID 4 */
8809 {.name = "dhcp", 8814 {.name = "dhcp",
8810 .pattern = {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8815 .pattern = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0 , 0 ,
8811 0 , 0 , 0 , 0 , 0 , 0 , 0x45, 0 , 8816 0 , 0 , 0 , 0 , 0 , 0 , 0x45, 0 ,
8812 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0x11, 8817 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0x11,
8813 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8818 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
8814 0 , 0 , 0 , 0 , 0x00, 0x44}, 8819 0 , 0 , 0 , 0 , 0x00, 0x44},
8815 .pattern_len = 38, 8820 .pattern_len = 38,
8816 .mask = { 0, /* OCTET 1 */ 8821 .mask = { BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(4) | BIT(5),
8817 BIT(6), /* OCTET 2 */ 8822 BIT(6), /* OCTET 2 */
8818 BIT(7), /* OCTET 3 */ 8823 BIT(7), /* OCTET 3 */
8819 0, /* OCTET 4 */ 8824 0, /* OCTET 4 */
8820 BIT(4) | BIT(5) }, /* OCTET 5 */ 8825 BIT(4) | BIT(5) }, /* OCTET 5 */
8826 .mask_len = 5,
8827 },
8828
8829 /* ID 5 */
8830 {.name = "arp",
8831 .pattern = {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
8832 0 , 0 , 0 , 0 , 0x08, 0x06},
8833 .pattern_len = 14,
8834 .mask = { 0, /* OCTET 1 */
8835 BIT(4) | BIT(5) }, /* OCTET 2 */
8836 .mask_len = 2,
8837 },
8838
8839 /* ID 6 */
8840 {.name = "ssdp",
8841 .pattern = {0x01, 0x00, 0x5E, 0 , 0 , 0 , 0 , 0 ,
8842 0 , 0 , 0 , 0 , 0 , 0 , 0x45, 0 ,
8843 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0x11,
8844 0 , 0 , 0 , 0 , 0 , 0 , 0xEF, 0xFF,
8845 0xFF, 0xFA, 0 , 0 , 0x07, 0x6C},
8846 .pattern_len = 38,
8847 .mask = { BIT(0) | BIT(1) | BIT(2), /* OCTET 1 */
8848 BIT(6), /* OCTET 2 */
8849 BIT(7), /* OCTET 3 */
8850 BIT(6) | BIT(7), /* OCTET 4 */
8851 BIT(0) | BIT(1) | BIT(4) | BIT(5) }, /* OCTET 5 */
8821 .mask_len = 5, 8852 .mask_len = 5,
8822 }, 8853 },
8823}; 8854};