source: trunk/package/hostapd/patches/780-wds_addr_fix.patch @ 27823

Last change on this file since 27823 was 27823, checked in by nbd, 5 years ago

hostapd: fix wds interface address handling for multi-bssid

File size: 2.1 KB
  • src/drivers/driver_nl80211.c

    a b struct i802_bss { 
    111111        struct wpa_driver_nl80211_data *drv; 
    112112        struct i802_bss *next; 
    113113        int ifindex; 
     114        u8 addr[ETH_ALEN]; 
    114115        char ifname[IFNAMSIZ + 1]; 
    115116        char brname[IFNAMSIZ]; 
    116117        unsigned int beacon_set:1; 
    struct i802_bss { 
    121122struct wpa_driver_nl80211_data { 
    122123        struct nl80211_global *global; 
    123124        struct dl_list list; 
    124         u8 addr[ETH_ALEN]; 
    125125        char phyname[32]; 
    126126        void *ctx; 
    127127        struct netlink_data *netlink; 
    wpa_driver_nl80211_finish_drv_init(struc 
    21112111        if (wpa_driver_nl80211_capa(drv)) 
    21122112                return -1; 
    21132113 
    2114         if (linux_get_ifhwaddr(drv->ioctl_sock, bss->ifname, drv->addr)) 
     2114        if (linux_get_ifhwaddr(drv->ioctl_sock, bss->ifname, bss->addr)) 
    21152115                return -1; 
    21162116 
    21172117        if (nl80211_register_action_frames(drv) < 0) { 
    static int i802_set_wds_sta(void *priv,  
    56505650                if (!if_nametoindex(name)) { 
    56515651                        if (nl80211_create_iface(drv, name, 
    56525652                                                 NL80211_IFTYPE_AP_VLAN, 
    5653                                                  NULL, 1) < 0) 
     5653                                                 bss->addr, 1) < 0) 
    56545654                                return -1; 
    56555655                        if (bridge_ifname && 
    56565656                            linux_br_add_if(drv->ioctl_sock, bridge_ifname, 
    static int nl80211_addr_in_use(struct nl 
    58785878        struct wpa_driver_nl80211_data *drv; 
    58795879        dl_list_for_each(drv, &global->interfaces, 
    58805880                         struct wpa_driver_nl80211_data, list) { 
    5881                 if (os_memcmp(addr, drv->addr, ETH_ALEN) == 0) 
     5881                if (os_memcmp(addr, drv->first_bss.addr, ETH_ALEN) == 0) 
    58825882                        return 1; 
    58835883        } 
    58845884        return 0; 
    static int nl80211_p2p_interface_addr(st 
    58935893        if (!drv->global) 
    58945894                return -1; 
    58955895 
    5896         os_memcpy(new_addr, drv->addr, ETH_ALEN); 
     5896        os_memcpy(new_addr, drv->first_bss.addr, ETH_ALEN); 
    58975897        for (idx = 0; idx < 64; idx++) { 
    5898                 new_addr[0] = drv->addr[0] | 0x02; 
     5898                new_addr[0] = drv->first_bss.addr[0] | 0x02; 
    58995899                new_addr[0] ^= idx << 2; 
    59005900                if (!nl80211_addr_in_use(drv->global, new_addr)) 
    59015901                        break; 
    static int wpa_driver_nl80211_if_add(voi 
    59805980        } 
    59815981#endif /* CONFIG_P2P */ 
    59825982 
     5983        memcpy(new_bss->addr, addr ? addr : if_addr, ETH_ALEN); 
     5984 
    59835985#ifdef HOSTAPD 
    59845986        if (bridge && 
    59855987            i802_check_bridge(drv, new_bss, bridge, ifname) < 0) { 
Note: See TracBrowser for help on using the repository browser.