aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/nl80211.c58
1 files changed, 56 insertions, 2 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 6bb73a3a339..a7d0b94f6b5 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1049,6 +1049,11 @@ static int nl80211_addset_beacon(struct sk_buff *skb, struct genl_info *info)
1049 if (err) 1049 if (err)
1050 goto unlock_rtnl; 1050 goto unlock_rtnl;
1051 1051
1052 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP) {
1053 err = -EOPNOTSUPP;
1054 goto out;
1055 }
1056
1052 switch (info->genlhdr->cmd) { 1057 switch (info->genlhdr->cmd) {
1053 case NL80211_CMD_NEW_BEACON: 1058 case NL80211_CMD_NEW_BEACON:
1054 /* these are required for NEW_BEACON */ 1059 /* these are required for NEW_BEACON */
@@ -1136,6 +1141,10 @@ static int nl80211_del_beacon(struct sk_buff *skb, struct genl_info *info)
1136 goto out; 1141 goto out;
1137 } 1142 }
1138 1143
1144 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP) {
1145 err = -EOPNOTSUPP;
1146 goto out;
1147 }
1139 err = drv->ops->del_beacon(&drv->wiphy, dev); 1148 err = drv->ops->del_beacon(&drv->wiphy, dev);
1140 1149
1141 out: 1150 out:
@@ -1324,7 +1333,7 @@ static int nl80211_dump_station(struct sk_buff *skb,
1324 } 1333 }
1325 1334
1326 if (!dev->ops->dump_station) { 1335 if (!dev->ops->dump_station) {
1327 err = -ENOSYS; 1336 err = -EOPNOTSUPP;
1328 goto out_err; 1337 goto out_err;
1329 } 1338 }
1330 1339
@@ -1698,10 +1707,15 @@ static int nl80211_dump_mpath(struct sk_buff *skb,
1698 } 1707 }
1699 1708
1700 if (!dev->ops->dump_mpath) { 1709 if (!dev->ops->dump_mpath) {
1701 err = -ENOSYS; 1710 err = -EOPNOTSUPP;
1702 goto out_err; 1711 goto out_err;
1703 } 1712 }
1704 1713
1714 if (netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) {
1715 err = -EOPNOTSUPP;
1716 goto out;
1717 }
1718
1705 while (1) { 1719 while (1) {
1706 err = dev->ops->dump_mpath(&dev->wiphy, netdev, path_idx, 1720 err = dev->ops->dump_mpath(&dev->wiphy, netdev, path_idx,
1707 dst, next_hop, &pinfo); 1721 dst, next_hop, &pinfo);
@@ -1759,6 +1773,11 @@ static int nl80211_get_mpath(struct sk_buff *skb, struct genl_info *info)
1759 goto out; 1773 goto out;
1760 } 1774 }
1761 1775
1776 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) {
1777 err = -EOPNOTSUPP;
1778 goto out;
1779 }
1780
1762 err = drv->ops->get_mpath(&drv->wiphy, dev, dst, next_hop, &pinfo); 1781 err = drv->ops->get_mpath(&drv->wiphy, dev, dst, next_hop, &pinfo);
1763 if (err) 1782 if (err)
1764 goto out; 1783 goto out;
@@ -1813,6 +1832,11 @@ static int nl80211_set_mpath(struct sk_buff *skb, struct genl_info *info)
1813 goto out; 1832 goto out;
1814 } 1833 }
1815 1834
1835 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) {
1836 err = -EOPNOTSUPP;
1837 goto out;
1838 }
1839
1816 if (!netif_running(dev)) { 1840 if (!netif_running(dev)) {
1817 err = -ENETDOWN; 1841 err = -ENETDOWN;
1818 goto out; 1842 goto out;
@@ -1856,6 +1880,11 @@ static int nl80211_new_mpath(struct sk_buff *skb, struct genl_info *info)
1856 goto out; 1880 goto out;
1857 } 1881 }
1858 1882
1883 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) {
1884 err = -EOPNOTSUPP;
1885 goto out;
1886 }
1887
1859 if (!netif_running(dev)) { 1888 if (!netif_running(dev)) {
1860 err = -ENETDOWN; 1889 err = -ENETDOWN;
1861 goto out; 1890 goto out;
@@ -1944,6 +1973,11 @@ static int nl80211_set_bss(struct sk_buff *skb, struct genl_info *info)
1944 goto out; 1973 goto out;
1945 } 1974 }
1946 1975
1976 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP) {
1977 err = -EOPNOTSUPP;
1978 goto out;
1979 }
1980
1947 err = drv->ops->change_bss(&drv->wiphy, dev, &params); 1981 err = drv->ops->change_bss(&drv->wiphy, dev, &params);
1948 1982
1949 out: 1983 out:
@@ -2661,6 +2695,11 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
2661 goto out; 2695 goto out;
2662 } 2696 }
2663 2697
2698 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) {
2699 err = -EOPNOTSUPP;
2700 goto out;
2701 }
2702
2664 if (!netif_running(dev)) { 2703 if (!netif_running(dev)) {
2665 err = -ENETDOWN; 2704 err = -ENETDOWN;
2666 goto out; 2705 goto out;
@@ -2734,6 +2773,11 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
2734 goto out; 2773 goto out;
2735 } 2774 }
2736 2775
2776 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) {
2777 err = -EOPNOTSUPP;
2778 goto out;
2779 }
2780
2737 if (!netif_running(dev)) { 2781 if (!netif_running(dev)) {
2738 err = -ENETDOWN; 2782 err = -ENETDOWN;
2739 goto out; 2783 goto out;
@@ -2797,6 +2841,11 @@ static int nl80211_deauthenticate(struct sk_buff *skb, struct genl_info *info)
2797 goto out; 2841 goto out;
2798 } 2842 }
2799 2843
2844 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) {
2845 err = -EOPNOTSUPP;
2846 goto out;
2847 }
2848
2800 if (!netif_running(dev)) { 2849 if (!netif_running(dev)) {
2801 err = -ENETDOWN; 2850 err = -ENETDOWN;
2802 goto out; 2851 goto out;
@@ -2856,6 +2905,11 @@ static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info)
2856 goto out; 2905 goto out;
2857 } 2906 }
2858 2907
2908 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) {
2909 err = -EOPNOTSUPP;
2910 goto out;
2911 }
2912
2859 if (!netif_running(dev)) { 2913 if (!netif_running(dev)) {
2860 err = -ENETDOWN; 2914 err = -ENETDOWN;
2861 goto out; 2915 goto out;