diff options
| author | Takashi Iwai <tiwai@suse.de> | 2009-12-15 04:29:06 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2009-12-15 04:29:06 -0500 |
| commit | 709334c87dbdb44150ce436b3d13c814db0dcae9 (patch) | |
| tree | 5861a45f70c1f283720337abd864498f5afb3dbe /net/mac80211/debugfs_netdev.c | |
| parent | 0d64b568fcd48b133721c1d322e7c51d85eb12df (diff) | |
| parent | f74890277a196949e4004fe2955e1d4fb3930f98 (diff) | |
Merge branch 'fixes' of git://git.alsa-project.org/alsa-kernel into for-linus
Diffstat (limited to 'net/mac80211/debugfs_netdev.c')
| -rw-r--r-- | net/mac80211/debugfs_netdev.c | 176 |
1 files changed, 28 insertions, 148 deletions
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c index 61234e79022b..472b2039906c 100644 --- a/net/mac80211/debugfs_netdev.c +++ b/net/mac80211/debugfs_netdev.c | |||
| @@ -149,12 +149,14 @@ IEEE80211_IF_FILE(path_refresh_time, | |||
| 149 | u.mesh.mshcfg.path_refresh_time, DEC); | 149 | u.mesh.mshcfg.path_refresh_time, DEC); |
| 150 | IEEE80211_IF_FILE(min_discovery_timeout, | 150 | IEEE80211_IF_FILE(min_discovery_timeout, |
| 151 | u.mesh.mshcfg.min_discovery_timeout, DEC); | 151 | u.mesh.mshcfg.min_discovery_timeout, DEC); |
| 152 | IEEE80211_IF_FILE(dot11MeshHWMPRootMode, | ||
| 153 | u.mesh.mshcfg.dot11MeshHWMPRootMode, DEC); | ||
| 152 | #endif | 154 | #endif |
| 153 | 155 | ||
| 154 | 156 | ||
| 155 | #define DEBUGFS_ADD(name, type)\ | 157 | #define DEBUGFS_ADD(name, type) \ |
| 156 | sdata->debugfs.type.name = debugfs_create_file(#name, 0400,\ | 158 | debugfs_create_file(#name, 0400, sdata->debugfs.dir, \ |
| 157 | sdata->debugfsdir, sdata, &name##_ops); | 159 | sdata, &name##_ops); |
| 158 | 160 | ||
| 159 | static void add_sta_files(struct ieee80211_sub_if_data *sdata) | 161 | static void add_sta_files(struct ieee80211_sub_if_data *sdata) |
| 160 | { | 162 | { |
| @@ -199,30 +201,32 @@ static void add_monitor_files(struct ieee80211_sub_if_data *sdata) | |||
| 199 | } | 201 | } |
| 200 | 202 | ||
| 201 | #ifdef CONFIG_MAC80211_MESH | 203 | #ifdef CONFIG_MAC80211_MESH |
| 202 | #define MESHSTATS_ADD(name)\ | ||
| 203 | sdata->mesh_stats.name = debugfs_create_file(#name, 0400,\ | ||
| 204 | sdata->mesh_stats_dir, sdata, &name##_ops); | ||
| 205 | 204 | ||
| 206 | static void add_mesh_stats(struct ieee80211_sub_if_data *sdata) | 205 | static void add_mesh_stats(struct ieee80211_sub_if_data *sdata) |
| 207 | { | 206 | { |
| 208 | sdata->mesh_stats_dir = debugfs_create_dir("mesh_stats", | 207 | struct dentry *dir = debugfs_create_dir("mesh_stats", |
| 209 | sdata->debugfsdir); | 208 | sdata->debugfs.dir); |
| 209 | |||
| 210 | #define MESHSTATS_ADD(name)\ | ||
| 211 | debugfs_create_file(#name, 0400, dir, sdata, &name##_ops); | ||
| 212 | |||
| 210 | MESHSTATS_ADD(fwded_mcast); | 213 | MESHSTATS_ADD(fwded_mcast); |
| 211 | MESHSTATS_ADD(fwded_unicast); | 214 | MESHSTATS_ADD(fwded_unicast); |
| 212 | MESHSTATS_ADD(fwded_frames); | 215 | MESHSTATS_ADD(fwded_frames); |
| 213 | MESHSTATS_ADD(dropped_frames_ttl); | 216 | MESHSTATS_ADD(dropped_frames_ttl); |
| 214 | MESHSTATS_ADD(dropped_frames_no_route); | 217 | MESHSTATS_ADD(dropped_frames_no_route); |
| 215 | MESHSTATS_ADD(estab_plinks); | 218 | MESHSTATS_ADD(estab_plinks); |
| 219 | #undef MESHSTATS_ADD | ||
| 216 | } | 220 | } |
| 217 | 221 | ||
| 218 | #define MESHPARAMS_ADD(name)\ | ||
| 219 | sdata->mesh_config.name = debugfs_create_file(#name, 0600,\ | ||
| 220 | sdata->mesh_config_dir, sdata, &name##_ops); | ||
| 221 | |||
| 222 | static void add_mesh_config(struct ieee80211_sub_if_data *sdata) | 222 | static void add_mesh_config(struct ieee80211_sub_if_data *sdata) |
| 223 | { | 223 | { |
| 224 | sdata->mesh_config_dir = debugfs_create_dir("mesh_config", | 224 | struct dentry *dir = debugfs_create_dir("mesh_config", |
| 225 | sdata->debugfsdir); | 225 | sdata->debugfs.dir); |
| 226 | |||
| 227 | #define MESHPARAMS_ADD(name) \ | ||
| 228 | debugfs_create_file(#name, 0600, dir, sdata, &name##_ops); | ||
| 229 | |||
| 226 | MESHPARAMS_ADD(dot11MeshMaxRetries); | 230 | MESHPARAMS_ADD(dot11MeshMaxRetries); |
| 227 | MESHPARAMS_ADD(dot11MeshRetryTimeout); | 231 | MESHPARAMS_ADD(dot11MeshRetryTimeout); |
| 228 | MESHPARAMS_ADD(dot11MeshConfirmTimeout); | 232 | MESHPARAMS_ADD(dot11MeshConfirmTimeout); |
| @@ -236,12 +240,14 @@ static void add_mesh_config(struct ieee80211_sub_if_data *sdata) | |||
| 236 | MESHPARAMS_ADD(dot11MeshHWMPmaxPREQretries); | 240 | MESHPARAMS_ADD(dot11MeshHWMPmaxPREQretries); |
| 237 | MESHPARAMS_ADD(path_refresh_time); | 241 | MESHPARAMS_ADD(path_refresh_time); |
| 238 | MESHPARAMS_ADD(min_discovery_timeout); | 242 | MESHPARAMS_ADD(min_discovery_timeout); |
| 243 | |||
| 244 | #undef MESHPARAMS_ADD | ||
| 239 | } | 245 | } |
| 240 | #endif | 246 | #endif |
| 241 | 247 | ||
| 242 | static void add_files(struct ieee80211_sub_if_data *sdata) | 248 | static void add_files(struct ieee80211_sub_if_data *sdata) |
| 243 | { | 249 | { |
| 244 | if (!sdata->debugfsdir) | 250 | if (!sdata->debugfs.dir) |
| 245 | return; | 251 | return; |
| 246 | 252 | ||
| 247 | switch (sdata->vif.type) { | 253 | switch (sdata->vif.type) { |
| @@ -274,134 +280,6 @@ static void add_files(struct ieee80211_sub_if_data *sdata) | |||
| 274 | } | 280 | } |
| 275 | } | 281 | } |
| 276 | 282 | ||
| 277 | #define DEBUGFS_DEL(name, type) \ | ||
| 278 | do { \ | ||
| 279 | debugfs_remove(sdata->debugfs.type.name); \ | ||
| 280 | sdata->debugfs.type.name = NULL; \ | ||
| 281 | } while (0) | ||
| 282 | |||
| 283 | static void del_sta_files(struct ieee80211_sub_if_data *sdata) | ||
| 284 | { | ||
| 285 | DEBUGFS_DEL(drop_unencrypted, sta); | ||
| 286 | DEBUGFS_DEL(force_unicast_rateidx, sta); | ||
| 287 | DEBUGFS_DEL(max_ratectrl_rateidx, sta); | ||
| 288 | |||
| 289 | DEBUGFS_DEL(bssid, sta); | ||
| 290 | DEBUGFS_DEL(aid, sta); | ||
| 291 | DEBUGFS_DEL(capab, sta); | ||
| 292 | } | ||
| 293 | |||
| 294 | static void del_ap_files(struct ieee80211_sub_if_data *sdata) | ||
| 295 | { | ||
| 296 | DEBUGFS_DEL(drop_unencrypted, ap); | ||
| 297 | DEBUGFS_DEL(force_unicast_rateidx, ap); | ||
| 298 | DEBUGFS_DEL(max_ratectrl_rateidx, ap); | ||
| 299 | |||
| 300 | DEBUGFS_DEL(num_sta_ps, ap); | ||
| 301 | DEBUGFS_DEL(dtim_count, ap); | ||
| 302 | DEBUGFS_DEL(num_buffered_multicast, ap); | ||
| 303 | } | ||
| 304 | |||
| 305 | static void del_wds_files(struct ieee80211_sub_if_data *sdata) | ||
| 306 | { | ||
| 307 | DEBUGFS_DEL(drop_unencrypted, wds); | ||
| 308 | DEBUGFS_DEL(force_unicast_rateidx, wds); | ||
| 309 | DEBUGFS_DEL(max_ratectrl_rateidx, wds); | ||
| 310 | |||
| 311 | DEBUGFS_DEL(peer, wds); | ||
| 312 | } | ||
| 313 | |||
| 314 | static void del_vlan_files(struct ieee80211_sub_if_data *sdata) | ||
| 315 | { | ||
| 316 | DEBUGFS_DEL(drop_unencrypted, vlan); | ||
| 317 | DEBUGFS_DEL(force_unicast_rateidx, vlan); | ||
| 318 | DEBUGFS_DEL(max_ratectrl_rateidx, vlan); | ||
| 319 | } | ||
| 320 | |||
| 321 | static void del_monitor_files(struct ieee80211_sub_if_data *sdata) | ||
| 322 | { | ||
| 323 | } | ||
| 324 | |||
| 325 | #ifdef CONFIG_MAC80211_MESH | ||
| 326 | #define MESHSTATS_DEL(name) \ | ||
| 327 | do { \ | ||
| 328 | debugfs_remove(sdata->mesh_stats.name); \ | ||
| 329 | sdata->mesh_stats.name = NULL; \ | ||
| 330 | } while (0) | ||
| 331 | |||
| 332 | static void del_mesh_stats(struct ieee80211_sub_if_data *sdata) | ||
| 333 | { | ||
| 334 | MESHSTATS_DEL(fwded_mcast); | ||
| 335 | MESHSTATS_DEL(fwded_unicast); | ||
| 336 | MESHSTATS_DEL(fwded_frames); | ||
| 337 | MESHSTATS_DEL(dropped_frames_ttl); | ||
| 338 | MESHSTATS_DEL(dropped_frames_no_route); | ||
| 339 | MESHSTATS_DEL(estab_plinks); | ||
| 340 | debugfs_remove(sdata->mesh_stats_dir); | ||
| 341 | sdata->mesh_stats_dir = NULL; | ||
| 342 | } | ||
| 343 | |||
| 344 | #define MESHPARAMS_DEL(name) \ | ||
| 345 | do { \ | ||
| 346 | debugfs_remove(sdata->mesh_config.name); \ | ||
| 347 | sdata->mesh_config.name = NULL; \ | ||
| 348 | } while (0) | ||
| 349 | |||
| 350 | static void del_mesh_config(struct ieee80211_sub_if_data *sdata) | ||
| 351 | { | ||
| 352 | MESHPARAMS_DEL(dot11MeshMaxRetries); | ||
| 353 | MESHPARAMS_DEL(dot11MeshRetryTimeout); | ||
| 354 | MESHPARAMS_DEL(dot11MeshConfirmTimeout); | ||
| 355 | MESHPARAMS_DEL(dot11MeshHoldingTimeout); | ||
| 356 | MESHPARAMS_DEL(dot11MeshTTL); | ||
| 357 | MESHPARAMS_DEL(auto_open_plinks); | ||
| 358 | MESHPARAMS_DEL(dot11MeshMaxPeerLinks); | ||
| 359 | MESHPARAMS_DEL(dot11MeshHWMPactivePathTimeout); | ||
| 360 | MESHPARAMS_DEL(dot11MeshHWMPpreqMinInterval); | ||
| 361 | MESHPARAMS_DEL(dot11MeshHWMPnetDiameterTraversalTime); | ||
| 362 | MESHPARAMS_DEL(dot11MeshHWMPmaxPREQretries); | ||
| 363 | MESHPARAMS_DEL(path_refresh_time); | ||
| 364 | MESHPARAMS_DEL(min_discovery_timeout); | ||
| 365 | debugfs_remove(sdata->mesh_config_dir); | ||
| 366 | sdata->mesh_config_dir = NULL; | ||
| 367 | } | ||
| 368 | #endif | ||
| 369 | |||
| 370 | static void del_files(struct ieee80211_sub_if_data *sdata) | ||
| 371 | { | ||
| 372 | if (!sdata->debugfsdir) | ||
| 373 | return; | ||
| 374 | |||
| 375 | switch (sdata->vif.type) { | ||
| 376 | case NL80211_IFTYPE_MESH_POINT: | ||
| 377 | #ifdef CONFIG_MAC80211_MESH | ||
| 378 | del_mesh_stats(sdata); | ||
| 379 | del_mesh_config(sdata); | ||
| 380 | #endif | ||
| 381 | break; | ||
| 382 | case NL80211_IFTYPE_STATION: | ||
| 383 | del_sta_files(sdata); | ||
| 384 | break; | ||
| 385 | case NL80211_IFTYPE_ADHOC: | ||
| 386 | /* XXX */ | ||
| 387 | break; | ||
| 388 | case NL80211_IFTYPE_AP: | ||
| 389 | del_ap_files(sdata); | ||
| 390 | break; | ||
| 391 | case NL80211_IFTYPE_WDS: | ||
| 392 | del_wds_files(sdata); | ||
| 393 | break; | ||
| 394 | case NL80211_IFTYPE_MONITOR: | ||
| 395 | del_monitor_files(sdata); | ||
| 396 | break; | ||
| 397 | case NL80211_IFTYPE_AP_VLAN: | ||
| 398 | del_vlan_files(sdata); | ||
| 399 | break; | ||
| 400 | default: | ||
| 401 | break; | ||
| 402 | } | ||
| 403 | } | ||
| 404 | |||
| 405 | static int notif_registered; | 283 | static int notif_registered; |
| 406 | 284 | ||
| 407 | void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata) | 285 | void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata) |
| @@ -412,16 +290,18 @@ void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata) | |||
| 412 | return; | 290 | return; |
| 413 | 291 | ||
| 414 | sprintf(buf, "netdev:%s", sdata->dev->name); | 292 | sprintf(buf, "netdev:%s", sdata->dev->name); |
| 415 | sdata->debugfsdir = debugfs_create_dir(buf, | 293 | sdata->debugfs.dir = debugfs_create_dir(buf, |
| 416 | sdata->local->hw.wiphy->debugfsdir); | 294 | sdata->local->hw.wiphy->debugfsdir); |
| 417 | add_files(sdata); | 295 | add_files(sdata); |
| 418 | } | 296 | } |
| 419 | 297 | ||
| 420 | void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata) | 298 | void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata) |
| 421 | { | 299 | { |
| 422 | del_files(sdata); | 300 | if (!sdata->debugfs.dir) |
| 423 | debugfs_remove(sdata->debugfsdir); | 301 | return; |
| 424 | sdata->debugfsdir = NULL; | 302 | |
| 303 | debugfs_remove_recursive(sdata->debugfs.dir); | ||
| 304 | sdata->debugfs.dir = NULL; | ||
| 425 | } | 305 | } |
| 426 | 306 | ||
| 427 | static int netdev_notify(struct notifier_block *nb, | 307 | static int netdev_notify(struct notifier_block *nb, |
| @@ -444,7 +324,7 @@ static int netdev_notify(struct notifier_block *nb, | |||
| 444 | 324 | ||
| 445 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 325 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| 446 | 326 | ||
| 447 | dir = sdata->debugfsdir; | 327 | dir = sdata->debugfs.dir; |
| 448 | 328 | ||
| 449 | if (!dir) | 329 | if (!dir) |
| 450 | return 0; | 330 | return 0; |
