3 @@ -137,6 +137,20 @@ static int get_if_type(int *argc, char *
7 +static int parse_wds_flag(const char *value, struct nl_msg *msg)
9 + if (strcmp(value, "on") == 0)
10 + NLA_PUT_U8(msg, NL80211_ATTR_4ADDR, 1);
11 + else if (strcmp(value, "off") == 0)
12 + NLA_PUT_U8(msg, NL80211_ATTR_4ADDR, 0);
21 static int handle_interface_add(struct nl80211_state *state,
24 @@ -168,6 +182,15 @@ static int handle_interface_add(struct n
28 + } else if (strcmp(argv[0], "wds") == 0) {
31 + if (parse_wds_flag(argv[0], msg)) {
32 + fprintf(stderr, "wds error\n");
37 } else if (strcmp(argv[0], "flags") == 0) {
40 @@ -192,14 +215,14 @@ static int handle_interface_add(struct n
44 -COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [flags <flag>*]",
45 +COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [wds on|off] [flags <flag>*]",
46 NL80211_CMD_NEW_INTERFACE, 0, CIB_PHY, handle_interface_add,
47 "Add a new virtual interface with the given configuration.\n"
49 "The flags are only used for monitor interfaces, valid flags are:\n"
51 "The mesh_id is used only for mesh mode.");
52 -COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [flags <flag>*]",
53 +COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [wds on|off] [flags <flag>*]",
54 NL80211_CMD_NEW_INTERFACE, 0, CIB_NETDEV, handle_interface_add, NULL);
56 static int handle_interface_del(struct nl80211_state *state,
59 @@ -584,6 +584,8 @@ enum nl80211_commands {
60 * changed then the list changed and the dump should be repeated
61 * completely from scratch.
63 + * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface
65 * @NL80211_ATTR_MAX: highest attribute number currently defined
66 * @__NL80211_ATTR_AFTER_LAST: internal use
68 @@ -714,6 +716,8 @@ enum nl80211_attrs {
74 /* add attributes here, update the policy in nl80211.c */
76 __NL80211_ATTR_AFTER_LAST,