Search Linux Wireless

Re: question about open11s installation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks to your patch, I could avoid the strange operation of the
system when I executed the command for showing mesh path.
But the problem that there's no mesh connection established still remains.
My wlan cards use broadcom 4318 chipsets, and I installed
wireless-testing kernel, iw and libnl correctly, I think.
Then what will be the possible cause?

2008/7/18 Johannes Berg <johannes@xxxxxxxxxxxxxxxx>:
>
> > [  276.676290] ------------[ cut here ]------------
> > [  276.676290] kernel BUG at net/mac80211/ieee80211_i.h:757!
> > [  276.676290] invalid opcode: 0000 [#1] SMP
> > [  276.676290] Modules linked in: rfkill_input radeon drm rfcomm l2cap
> > bluetooth ppdev speedstep_lib cpufreq_stats cpufreq_userspace
> > cpufreq_powersave cpufreq_ondemand freq_table cpufreq_conservative
> > video output container sbs sbshc battery iptable_filter ip_tables
> > x_tables ac lp arc4 ecb crypto_blkcipher b43 rfkill mac80211
> > parport_pc parport cfg80211 led_class psmouse input_polldev serio_raw
> > pcspkr iTCO_wdt iTCO_vendor_support sky2 button intel_agp agpgart
> > shpchp pci_hotplug ipv6 evdev ext3 jbd mbcache sd_mod sg sr_mod cdrom
> > pata_acpi ata_generic 8139too ata_piix libata scsi_mod dock 8139cp mii
> > ssb ehci_hcd uhci_hcd usbcore thermal processor fan thermal_sys fuse
> > [  276.676290]
> > [  276.676290] Pid: 5495, comm: iw Not tainted (2.6.26-custom-wl #1)
> > [  276.676290] EIP: 0060:[<e09d6e0c>] EFLAGS: 00010246 CPU: 0
> > [  276.676290] EIP is at ieee80211_dump_mpath+0x6c/0x80 [mac80211]
>
> Clearly, there's a BUG_ON being hit, and that's under RTNL so after that
> nothing works any more.
>
> Please try the patch below.
>
> johannes
>
> --- everything.orig/net/mac80211/cfg.c  2008-07-17 18:40:29.000000000 +0200
> +++ everything/net/mac80211/cfg.c       2008-07-17 18:55:03.000000000 +0200
> @@ -85,6 +85,7 @@ static int ieee80211_change_iface(struct
>                                  enum nl80211_iftype type, u32 *flags,
>                                  struct vif_params *params)
>  {
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
>        struct net_device *dev;
>        enum ieee80211_if_types itype;
>        struct ieee80211_sub_if_data *sdata;
> @@ -99,6 +100,9 @@ static int ieee80211_change_iface(struct
>        if (itype == IEEE80211_IF_TYPE_INVALID)
>                return -EINVAL;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
>        ret = ieee80211_if_change_type(sdata, itype);
> @@ -121,12 +125,16 @@ static int ieee80211_add_key(struct wiph
>                             u8 key_idx, u8 *mac_addr,
>                             struct key_params *params)
>  {
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
>        struct ieee80211_sub_if_data *sdata;
>        struct sta_info *sta = NULL;
>        enum ieee80211_key_alg alg;
>        struct ieee80211_key *key;
>        int err;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
>        switch (params->cipher) {
> @@ -171,10 +179,14 @@ static int ieee80211_add_key(struct wiph
>  static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
>                             u8 key_idx, u8 *mac_addr)
>  {
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
>        struct ieee80211_sub_if_data *sdata;
>        struct sta_info *sta;
>        int ret;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
>        rcu_read_lock();
> @@ -215,7 +227,8 @@ static int ieee80211_get_key(struct wiph
>                             void (*callback)(void *cookie,
>                                              struct key_params *params))
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct sta_info *sta = NULL;
>        u8 seq[6] = {0};
>        struct key_params params;
> @@ -224,6 +237,11 @@ static int ieee80211_get_key(struct wiph
>        u16 iv16;
>        int err = -ENOENT;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        rcu_read_lock();
>
>        if (mac_addr) {
> @@ -297,8 +315,12 @@ static int ieee80211_config_default_key(
>                                        struct net_device *dev,
>                                        u8 key_idx)
>  {
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
>        struct ieee80211_sub_if_data *sdata;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        rcu_read_lock();
>
>        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> @@ -479,9 +501,15 @@ static int ieee80211_config_beacon(struc
>  static int ieee80211_add_beacon(struct wiphy *wiphy, struct net_device *dev,
>                                struct beacon_parameters *params)
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct beacon_data *old;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
>                return -EINVAL;
>
> @@ -496,9 +524,15 @@ static int ieee80211_add_beacon(struct w
>  static int ieee80211_set_beacon(struct wiphy *wiphy, struct net_device *dev,
>                                struct beacon_parameters *params)
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct beacon_data *old;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
>                return -EINVAL;
>
> @@ -512,9 +546,15 @@ static int ieee80211_set_beacon(struct w
>
>  static int ieee80211_del_beacon(struct wiphy *wiphy, struct net_device *dev)
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct beacon_data *old;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
>                return -EINVAL;
>
> @@ -650,11 +690,14 @@ static void sta_apply_parameters(struct
>  static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
>                                 u8 *mac, struct station_parameters *params)
>  {
> -       struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
>        struct sta_info *sta;
>        struct ieee80211_sub_if_data *sdata;
>        int err;
>
> +       if (dev == local->mdev || params->vlan == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        /* Prevent a race with changing the rate control algorithm */
>        if (!netif_running(dev))
>                return -ENETDOWN;
> @@ -705,10 +748,15 @@ static int ieee80211_add_station(struct
>  static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev,
>                                 u8 *mac)
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> -       struct ieee80211_local *local = sdata->local;
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct sta_info *sta;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (mac) {
>                rcu_read_lock();
>
> @@ -734,10 +782,13 @@ static int ieee80211_change_station(stru
>                                    u8 *mac,
>                                    struct station_parameters *params)
>  {
> -       struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
>        struct sta_info *sta;
>        struct ieee80211_sub_if_data *vlansdata;
>
> +       if (dev == local->mdev || params->vlan == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        rcu_read_lock();
>
>        /* XXX: get sta belonging to dev */
> @@ -756,7 +807,7 @@ static int ieee80211_change_station(stru
>                        return -EINVAL;
>                }
>
> -               sta->sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
> +               sta->sdata = vlansdata;
>                ieee80211_send_layer2_update(sta);
>        }
>
> @@ -771,15 +822,20 @@ static int ieee80211_change_station(stru
>  static int ieee80211_add_mpath(struct wiphy *wiphy, struct net_device *dev,
>                                 u8 *dst, u8 *next_hop)
>  {
> -       struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct mesh_path *mpath;
>        struct sta_info *sta;
>        int err;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        if (!netif_running(dev))
>                return -ENETDOWN;
>
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
>                return -ENOTSUPP;
>
> @@ -821,14 +877,19 @@ static int ieee80211_change_mpath(struct
>                                    struct net_device *dev,
>                                    u8 *dst, u8 *next_hop)
>  {
> -       struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct mesh_path *mpath;
>        struct sta_info *sta;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
>        if (!netif_running(dev))
>                return -ENETDOWN;
>
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
>                return -ENOTSUPP;
>
> @@ -895,9 +956,15 @@ static int ieee80211_get_mpath(struct wi
>                               u8 *dst, u8 *next_hop, struct mpath_info *pinfo)
>
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct mesh_path *mpath;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
>                return -ENOTSUPP;
>
> @@ -917,9 +984,15 @@ static int ieee80211_dump_mpath(struct w
>                                 int idx, u8 *dst, u8 *next_hop,
>                                 struct mpath_info *pinfo)
>  {
> -       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +       struct ieee80211_local *local = wiphy_priv(wiphy);
> +       struct ieee80211_sub_if_data *sdata;
>        struct mesh_path *mpath;
>
> +       if (dev == local->mdev)
> +               return -EOPNOTSUPP;
> +
> +       sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> +
>        if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
>                return -ENOTSUPP;
>
>



--
YoungBin Im
Master Course Student
Multimedia & Mobile Communications Lab.
School of Computer Science and Engineering
Seoul National University, Republic of Korea.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux