aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2009-11-10 12:53:10 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-11-11 17:02:07 -0500
commit8b787643ca0a5130c647109d77fe512f89cfa611 (patch)
treeb3b0f74c57843a90f8a3822d37237d637c8dcfd0 /net/wireless/nl80211.c
parent1460dd158a520447b87661aea4afda1997d69cde (diff)
nl80211: add a parameter for using 4-address frames on virtual interfaces
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 8ed62b6c172b..8c8e4eae6a17 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -138,6 +138,7 @@ static struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] __read_mostly = {
138 [NL80211_ATTR_CIPHER_SUITE_GROUP] = { .type = NLA_U32 }, 138 [NL80211_ATTR_CIPHER_SUITE_GROUP] = { .type = NLA_U32 },
139 [NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 }, 139 [NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 },
140 [NL80211_ATTR_PID] = { .type = NLA_U32 }, 140 [NL80211_ATTR_PID] = { .type = NLA_U32 },
141 [NL80211_ATTR_4ADDR] = { .type = NLA_U8 },
141}; 142};
142 143
143/* policy for the attributes */ 144/* policy for the attributes */
@@ -987,6 +988,13 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
987 change = true; 988 change = true;
988 } 989 }
989 990
991 if (info->attrs[NL80211_ATTR_4ADDR]) {
992 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]);
993 change = true;
994 } else {
995 params.use_4addr = -1;
996 }
997
990 if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) { 998 if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) {
991 if (ntype != NL80211_IFTYPE_MONITOR) { 999 if (ntype != NL80211_IFTYPE_MONITOR) {
992 err = -EINVAL; 1000 err = -EINVAL;
@@ -1053,6 +1061,9 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
1053 params.mesh_id_len = nla_len(info->attrs[NL80211_ATTR_MESH_ID]); 1061 params.mesh_id_len = nla_len(info->attrs[NL80211_ATTR_MESH_ID]);
1054 } 1062 }
1055 1063
1064 if (info->attrs[NL80211_ATTR_4ADDR])
1065 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]);
1066
1056 err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ? 1067 err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ?
1057 info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, 1068 info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
1058 &flags); 1069 &flags);