diff options
author | Felix Fietkau <nbd@openwrt.org> | 2009-11-10 19:27:19 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2009-11-10 19:27:19 +0000 |
commit | 085fe6bf4bb73124543b7720610582450a1bdc7b (patch) | |
tree | 67c498562236b5fcf9fec91196ba1a4122f0914d /package/iw/patches/100-4addr.patch | |
parent | 5e3e6c8c0d8580f7d2c41cf1cfeb9a05665844ae (diff) | |
download | master-187ad058-085fe6bf4bb73124543b7720610582450a1bdc7b.tar.gz master-187ad058-085fe6bf4bb73124543b7720610582450a1bdc7b.tar.bz2 master-187ad058-085fe6bf4bb73124543b7720610582450a1bdc7b.zip |
mac80211: implement wds sta support (wds ap support work in progress, needs hostapd changes)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18356 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/iw/patches/100-4addr.patch')
-rw-r--r-- | package/iw/patches/100-4addr.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/package/iw/patches/100-4addr.patch b/package/iw/patches/100-4addr.patch new file mode 100644 index 0000000000..db6b88010b --- /dev/null +++ b/package/iw/patches/100-4addr.patch @@ -0,0 +1,76 @@ +--- a/interface.c ++++ b/interface.c +@@ -137,6 +137,20 @@ static int get_if_type(int *argc, char * + return 2; + } + ++static int parse_wds_flag(const char *value, struct nl_msg *msg) ++{ ++ if (strcmp(value, "on") == 0) ++ NLA_PUT_U8(msg, NL80211_ATTR_4ADDR, 1); ++ else if (strcmp(value, "off") == 0) ++ NLA_PUT_U8(msg, NL80211_ATTR_4ADDR, 0); ++ else ++ return 1; ++ return 0; ++ ++nla_put_failure: ++ return 1; ++} ++ + static int handle_interface_add(struct nl80211_state *state, + struct nl_cb *cb, + struct nl_msg *msg, +@@ -168,6 +182,15 @@ static int handle_interface_add(struct n + mesh_id = argv[0]; + argc--; + argv++; ++ } else if (strcmp(argv[0], "wds") == 0) { ++ argc--; ++ argv++; ++ if (parse_wds_flag(argv[0], msg)) { ++ fprintf(stderr, "wds error\n"); ++ return 2; ++ } ++ argc--; ++ argv++; + } else if (strcmp(argv[0], "flags") == 0) { + argc--; + argv++; +@@ -192,14 +215,14 @@ static int handle_interface_add(struct n + nla_put_failure: + return -ENOBUFS; + } +-COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [flags <flag>*]", ++COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [wds on|off] [flags <flag>*]", + NL80211_CMD_NEW_INTERFACE, 0, CIB_PHY, handle_interface_add, + "Add a new virtual interface with the given configuration.\n" + IFACE_TYPES "\n\n" + "The flags are only used for monitor interfaces, valid flags are:\n" + VALID_FLAGS "\n\n" + "The mesh_id is used only for mesh mode."); +-COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [flags <flag>*]", ++COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [wds on|off] [flags <flag>*]", + NL80211_CMD_NEW_INTERFACE, 0, CIB_NETDEV, handle_interface_add, NULL); + + static int handle_interface_del(struct nl80211_state *state, +--- a/nl80211.h ++++ b/nl80211.h +@@ -584,6 +584,8 @@ enum nl80211_commands { + * changed then the list changed and the dump should be repeated + * completely from scratch. + * ++ * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface ++ * + * @NL80211_ATTR_MAX: highest attribute number currently defined + * @__NL80211_ATTR_AFTER_LAST: internal use + */ +@@ -714,6 +716,8 @@ enum nl80211_attrs { + + NL80211_ATTR_PID, + ++ NL80211_ATTR_4ADDR, ++ + /* add attributes here, update the policy in nl80211.c */ + + __NL80211_ATTR_AFTER_LAST, |