hostapd: update to 20101109, reorganize patches
[openwrt/svn-archive/archive.git] / package / hostapd / patches / 330-wds_bridge_fix.patch
1 --- a/src/ap/ap_config.h
2 +++ b/src/ap/ap_config.h
3 @@ -148,6 +148,7 @@ struct hostapd_wmm_ac_params {
4 struct hostapd_bss_config {
5 char iface[IFNAMSIZ + 1];
6 char bridge[IFNAMSIZ + 1];
7 + char wds_bridge[IFNAMSIZ + 1];
8
9 enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
10
11 --- a/hostapd/config_file.c
12 +++ b/hostapd/config_file.c
13 @@ -1208,6 +1208,8 @@ struct hostapd_config * hostapd_config_r
14 sizeof(conf->bss[0].iface));
15 } else if (os_strcmp(buf, "bridge") == 0) {
16 os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
17 + } else if (os_strcmp(buf, "wds_bridge") == 0) {
18 + os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
19 } else if (os_strcmp(buf, "driver") == 0) {
20 int j;
21 /* clear to get error below if setting is invalid */
22 --- a/src/drivers/driver_nl80211.c
23 +++ b/src/drivers/driver_nl80211.c
24 @@ -4977,7 +4977,8 @@ static int i802_set_sta_vlan(void *priv,
25 }
26
27
28 -static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val)
29 +static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val,
30 + const char *bridge_ifname)
31 {
32 struct i802_bss *bss = priv;
33 struct wpa_driver_nl80211_data *drv = bss->drv;
34 @@ -4991,6 +4992,10 @@ static int i802_set_wds_sta(void *priv,
35 if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN,
36 NULL, 1) < 0)
37 return -1;
38 + if (bridge_ifname) {
39 + if (linux_br_add_if(drv->ioctl_sock, bridge_ifname, name) < 0)
40 + return -1;
41 + }
42 }
43 linux_set_iface_flags(drv->ioctl_sock, name, 1);
44 return i802_set_sta_vlan(priv, addr, name, 0);
45 --- a/src/ap/ap_drv_ops.c
46 +++ b/src/ap/ap_drv_ops.c
47 @@ -366,9 +366,15 @@ static int hostapd_vlan_if_remove(struct
48 static int hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr,
49 int aid, int val)
50 {
51 + const char *bridge = NULL;
52 +
53 if (hapd->driver == NULL || hapd->driver->set_wds_sta == NULL)
54 return 0;
55 - return hapd->driver->set_wds_sta(hapd->drv_priv, addr, aid, val);
56 + if (hapd->conf->wds_bridge[0])
57 + bridge = hapd->conf->wds_bridge;
58 + else if (hapd->conf->bridge[0])
59 + bridge = hapd->conf->bridge;
60 + return hapd->driver->set_wds_sta(hapd->drv_priv, addr, aid, val, bridge);
61 }
62
63
64 --- a/src/drivers/driver.h
65 +++ b/src/drivers/driver.h
66 @@ -1700,7 +1700,8 @@ struct wpa_driver_ops {
67 * @val: 1 = bind to 4-address WDS; 0 = unbind
68 * Returns: 0 on success, -1 on failure
69 */
70 - int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val);
71 + int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val,
72 + const char *bridge_ifname);
73
74 /**
75 * send_action - Transmit an Action frame