1 /* 2 * WPA Supplicant / dbus-based control interface 3 * Copyright (c) 2006, Dan Williams <dcbw (at) redhat.com> and Red Hat, Inc. 4 * Copyright (c) 2009-2010, Witold Sowa <witold.sowa (at) gmail.com> 5 * 6 * This software may be distributed under the terms of the BSD license. 7 * See README for more details. 8 */ 9 10 #ifndef CTRL_IFACE_DBUS_NEW_H 11 #define CTRL_IFACE_DBUS_NEW_H 12 13 #include "common/defs.h" 14 #include "p2p/p2p.h" 15 16 struct wpa_global; 17 struct wpa_supplicant; 18 struct wpa_ssid; 19 struct wps_event_m2d; 20 struct wps_event_fail; 21 struct wps_credential; 22 23 enum wpas_dbus_prop { 24 WPAS_DBUS_PROP_AP_SCAN, 25 WPAS_DBUS_PROP_PMF, 26 WPAS_DBUS_PROP_SCANNING, 27 WPAS_DBUS_PROP_STATE, 28 WPAS_DBUS_PROP_CURRENT_BSS, 29 WPAS_DBUS_PROP_CURRENT_NETWORK, 30 WPAS_DBUS_PROP_CURRENT_AUTH_MODE, 31 WPAS_DBUS_PROP_BSSS, 32 WPAS_DBUS_PROP_DISCONNECT_REASON, 33 WPAS_DBUS_PROP_ASSOC_STATUS_CODE, 34 }; 35 36 enum wpas_dbus_bss_prop { 37 WPAS_DBUS_BSS_PROP_SIGNAL, 38 WPAS_DBUS_BSS_PROP_FREQ, 39 WPAS_DBUS_BSS_PROP_MODE, 40 WPAS_DBUS_BSS_PROP_PRIVACY, 41 WPAS_DBUS_BSS_PROP_RATES, 42 WPAS_DBUS_BSS_PROP_WPA, 43 WPAS_DBUS_BSS_PROP_RSN, 44 WPAS_DBUS_BSS_PROP_WPS, 45 WPAS_DBUS_BSS_PROP_IES, 46 WPAS_DBUS_BSS_PROP_AGE, 47 }; 48 49 #define WPAS_DBUS_OBJECT_PATH_MAX 150 50 51 #define WPAS_DBUS_NEW_SERVICE "fi.w1.wpa_supplicant1" 52 #define WPAS_DBUS_NEW_PATH "/fi/w1/wpa_supplicant1" 53 #define WPAS_DBUS_NEW_INTERFACE "fi.w1.wpa_supplicant1" 54 55 #define WPAS_DBUS_NEW_PATH_INTERFACES WPAS_DBUS_NEW_PATH "/Interfaces" 56 #define WPAS_DBUS_NEW_IFACE_INTERFACE WPAS_DBUS_NEW_INTERFACE ".Interface" 57 #define WPAS_DBUS_NEW_IFACE_WPS WPAS_DBUS_NEW_IFACE_INTERFACE ".WPS" 58 59 #define WPAS_DBUS_NEW_NETWORKS_PART "Networks" 60 #define WPAS_DBUS_NEW_IFACE_NETWORK WPAS_DBUS_NEW_INTERFACE ".Network" 61 62 #define WPAS_DBUS_NEW_BSSIDS_PART "BSSs" 63 #define WPAS_DBUS_NEW_IFACE_BSS WPAS_DBUS_NEW_INTERFACE ".BSS" 64 65 #define WPAS_DBUS_NEW_IFACE_P2PDEVICE \ 66 WPAS_DBUS_NEW_IFACE_INTERFACE ".P2PDevice" 67 68 /* 69 * Groups correspond to P2P groups where this device is a GO (owner) 70 */ 71 #define WPAS_DBUS_NEW_P2P_GROUPS_PART "Groups" 72 #define WPAS_DBUS_NEW_IFACE_P2P_GROUP WPAS_DBUS_NEW_INTERFACE ".Group" 73 74 /* 75 * Different dbus object for persistent groups so they do not get confused 76 * with regular (configured) network objects. 77 */ 78 #define WPAS_DBUS_NEW_PERSISTENT_GROUPS_PART "PersistentGroups" 79 #define WPAS_DBUS_NEW_IFACE_PERSISTENT_GROUP \ 80 WPAS_DBUS_NEW_INTERFACE ".PersistentGroup" 81 82 #define WPAS_DBUS_NEW_P2P_PEERS_PART "Peers" 83 #define WPAS_DBUS_NEW_IFACE_P2P_PEER WPAS_DBUS_NEW_INTERFACE ".Peer" 84 85 /* Top-level Errors */ 86 #define WPAS_DBUS_ERROR_UNKNOWN_ERROR \ 87 WPAS_DBUS_NEW_INTERFACE ".UnknownError" 88 #define WPAS_DBUS_ERROR_INVALID_ARGS \ 89 WPAS_DBUS_NEW_INTERFACE ".InvalidArgs" 90 91 #define WPAS_DBUS_ERROR_IFACE_EXISTS \ 92 WPAS_DBUS_NEW_INTERFACE ".InterfaceExists" 93 #define WPAS_DBUS_ERROR_IFACE_DISABLED \ 94 WPAS_DBUS_NEW_INTERFACE ".InterfaceDisabled" 95 #define WPAS_DBUS_ERROR_IFACE_UNKNOWN \ 96 WPAS_DBUS_NEW_INTERFACE ".InterfaceUnknown" 97 98 #define WPAS_DBUS_ERROR_NOT_CONNECTED \ 99 WPAS_DBUS_NEW_INTERFACE ".NotConnected" 100 #define WPAS_DBUS_ERROR_NETWORK_UNKNOWN \ 101 WPAS_DBUS_NEW_INTERFACE ".NetworkUnknown" 102 103 #define WPAS_DBUS_ERROR_CONNECT_CHANNEL_UNAVAILABLE \ 104 WPAS_DBUS_NEW_INTERFACE ".ConnectChannelUnavailable" 105 #define WPAS_DBUS_ERROR_CONNECT_CHANNEL_UNSUPPORTED \ 106 WPAS_DBUS_NEW_INTERFACE ".ConnectChannelUnsupported" 107 #define WPAS_DBUS_ERROR_CONNECT_UNSPECIFIED_ERROR \ 108 WPAS_DBUS_NEW_INTERFACE ".ConnectUnspecifiedError" 109 110 #define WPAS_DBUS_ERROR_BLOB_EXISTS \ 111 WPAS_DBUS_NEW_INTERFACE ".BlobExists" 112 #define WPAS_DBUS_ERROR_BLOB_UNKNOWN \ 113 WPAS_DBUS_NEW_INTERFACE ".BlobUnknown" 114 115 #define WPAS_DBUS_ERROR_SUBSCRIPTION_IN_USE \ 116 WPAS_DBUS_NEW_INTERFACE ".SubscriptionInUse" 117 #define WPAS_DBUS_ERROR_NO_SUBSCRIPTION \ 118 WPAS_DBUS_NEW_INTERFACE ".NoSubscription" 119 #define WPAS_DBUS_ERROR_SUBSCRIPTION_EPERM \ 120 WPAS_DBUS_NEW_INTERFACE ".SubscriptionNotYou" 121 122 /* Interface-level errors */ 123 #define WPAS_DBUS_ERROR_IFACE_SCAN_ERROR \ 124 WPAS_DBUS_NEW_IFACE_INTERFACE ".ScanError" 125 126 void wpas_dbus_subscribe_noc(struct wpas_dbus_priv *priv); 127 void wpas_dbus_unsubscribe_noc(struct wpas_dbus_priv *priv); 128 129 130 #ifdef CONFIG_CTRL_IFACE_DBUS_NEW 131 132 int wpas_dbus_ctrl_iface_init(struct wpas_dbus_priv *priv); 133 void wpas_dbus_ctrl_iface_deinit(struct wpas_dbus_priv *iface); 134 135 int wpas_dbus_register_interface(struct wpa_supplicant *wpa_s); 136 int wpas_dbus_unregister_interface(struct wpa_supplicant *wpa_s); 137 void wpas_dbus_signal_prop_changed(struct wpa_supplicant *wpa_s, 138 enum wpas_dbus_prop property); 139 void wpas_dbus_bss_signal_prop_changed(struct wpa_supplicant *wpa_s, 140 enum wpas_dbus_bss_prop property, 141 unsigned int id); 142 void wpas_dbus_signal_network_enabled_changed(struct wpa_supplicant *wpa_s, 143 struct wpa_ssid *ssid); 144 void wpas_dbus_signal_network_selected(struct wpa_supplicant *wpa_s, int id); 145 void wpas_dbus_signal_network_request(struct wpa_supplicant *wpa_s, 146 struct wpa_ssid *ssid, 147 enum wpa_ctrl_req_type rtype, 148 const char *default_text); 149 void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, int success); 150 void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s, 151 const struct wps_credential *cred); 152 void wpas_dbus_signal_wps_event_m2d(struct wpa_supplicant *wpa_s, 153 struct wps_event_m2d *m2d); 154 void wpas_dbus_signal_wps_event_fail(struct wpa_supplicant *wpa_s, 155 struct wps_event_fail *fail); 156 void wpas_dbus_signal_wps_event_success(struct wpa_supplicant *wpa_s); 157 void wpas_dbus_signal_wps_event_pbc_overlap(struct wpa_supplicant *wpa_s); 158 int wpas_dbus_register_network(struct wpa_supplicant *wpa_s, 159 struct wpa_ssid *ssid); 160 int wpas_dbus_unregister_network(struct wpa_supplicant *wpa_s, int nid); 161 int wpas_dbus_unregister_bss(struct wpa_supplicant *wpa_s, 162 u8 bssid[ETH_ALEN], unsigned int id); 163 int wpas_dbus_register_bss(struct wpa_supplicant *wpa_s, 164 u8 bssid[ETH_ALEN], unsigned int id); 165 void wpas_dbus_signal_blob_added(struct wpa_supplicant *wpa_s, 166 const char *name); 167 void wpas_dbus_signal_blob_removed(struct wpa_supplicant *wpa_s, 168 const char *name); 169 void wpas_dbus_signal_debug_level_changed(struct wpa_global *global); 170 void wpas_dbus_signal_debug_timestamp_changed(struct wpa_global *global); 171 void wpas_dbus_signal_debug_show_keys_changed(struct wpa_global *global); 172 173 int wpas_dbus_register_peer(struct wpa_supplicant *wpa_s, const u8 *dev_addr); 174 void wpas_dbus_signal_p2p_find_stopped(struct wpa_supplicant *wpa_s); 175 void wpas_dbus_signal_peer_device_found(struct wpa_supplicant *wpa_s, 176 const u8 *dev_addr); 177 int wpas_dbus_unregister_peer(struct wpa_supplicant *wpa_s, 178 const u8 *dev_addr); 179 void wpas_dbus_signal_peer_device_lost(struct wpa_supplicant *wpa_s, 180 const u8 *dev_addr); 181 void wpas_dbus_signal_peer_groups_changed(struct wpa_supplicant *wpa_s, 182 const u8 *dev_addr); 183 void wpas_dbus_signal_p2p_group_removed(struct wpa_supplicant *wpa_s, 184 const char *role); 185 void wpas_dbus_signal_p2p_provision_discovery(struct wpa_supplicant *wpa_s, 186 const u8 *dev_addr, int request, 187 enum p2p_prov_disc_status status, 188 u16 config_methods, 189 unsigned int generated_pin); 190 void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s, 191 const u8 *src, u16 dev_passwd_id, 192 u8 go_intent); 193 void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s, 194 int client, int persistent, 195 const u8 *ip); 196 void wpas_dbus_signal_p2p_group_formation_failure(struct wpa_supplicant *wpa_s, 197 const char *reason); 198 void wpas_dbus_register_p2p_group(struct wpa_supplicant *wpa_s, 199 struct wpa_ssid *ssid); 200 void wpas_dbus_signal_p2p_go_neg_resp(struct wpa_supplicant *wpa_s, 201 struct p2p_go_neg_results *res); 202 void wpas_dbus_unregister_p2p_group(struct wpa_supplicant *wpa_s, 203 const struct wpa_ssid *ssid); 204 int wpas_dbus_register_persistent_group(struct wpa_supplicant *wpa_s, 205 struct wpa_ssid *ssid); 206 int wpas_dbus_unregister_persistent_group(struct wpa_supplicant *wpa_s, 207 int nid); 208 void wpas_dbus_signal_p2p_invitation_result(struct wpa_supplicant *wpa_s, 209 int status, const u8 *bssid); 210 void wpas_dbus_signal_p2p_peer_disconnected(struct wpa_supplicant *wpa_s, 211 const u8 *member); 212 void wpas_dbus_signal_p2p_sd_request(struct wpa_supplicant *wpa_s, 213 int freq, const u8 *sa, u8 dialog_token, 214 u16 update_indic, const u8 *tlvs, 215 size_t tlvs_len); 216 void wpas_dbus_signal_p2p_sd_response(struct wpa_supplicant *wpa_s, 217 const u8 *sa, u16 update_indic, 218 const u8 *tlvs, size_t tlvs_len); 219 void wpas_dbus_signal_p2p_peer_joined(struct wpa_supplicant *wpa_s, 220 const u8 *member); 221 void wpas_dbus_signal_p2p_wps_failed(struct wpa_supplicant *wpa_s, 222 struct wps_event_fail *fail); 223 void wpas_dbus_signal_certification(struct wpa_supplicant *wpa_s, 224 int depth, const char *subject, 225 const char *altsubject[], 226 int num_altsubject, 227 const char *cert_hash, 228 const struct wpabuf *cert); 229 void wpas_dbus_signal_preq(struct wpa_supplicant *wpa_s, 230 const u8 *addr, const u8 *dst, const u8 *bssid, 231 const u8 *ie, size_t ie_len, u32 ssi_signal); 232 void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s, 233 const char *status, const char *parameter); 234 void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s, 235 const u8 *sta); 236 void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s, 237 const u8 *sta); 238 void wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant *wpa_s, 239 const u8 *sa, const u8 *dev_addr, 240 const u8 *bssid, int id, 241 int op_freq); 242 243 #else /* CONFIG_CTRL_IFACE_DBUS_NEW */ 244 245 static inline int wpas_dbus_register_interface(struct wpa_supplicant *wpa_s) 246 { 247 return 0; 248 } 249 250 static inline int wpas_dbus_unregister_interface(struct wpa_supplicant *wpa_s) 251 { 252 return 0; 253 } 254 255 #define wpas_dbus_signal_state_changed(w, n, o) do { } while (0) 256 257 static inline void wpas_dbus_signal_prop_changed(struct wpa_supplicant *wpa_s, 258 enum wpas_dbus_prop property) 259 { 260 } 261 262 static inline void wpas_dbus_bss_signal_prop_changed( 263 struct wpa_supplicant *wpa_s, enum wpas_dbus_bss_prop property, 264 unsigned int id) 265 { 266 } 267 268 static inline void wpas_dbus_signal_network_enabled_changed( 269 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 270 { 271 } 272 273 static inline void wpas_dbus_signal_network_selected( 274 struct wpa_supplicant *wpa_s, int id) 275 { 276 } 277 278 static inline void wpas_dbus_signal_network_request( 279 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, 280 enum wpa_ctrl_req_type rtype, const char *default_txt) 281 { 282 } 283 284 static inline void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, 285 int success) 286 { 287 } 288 289 static inline void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s, 290 const struct wps_credential *cred) 291 { 292 } 293 294 static inline void wpas_dbus_signal_wps_event_m2d(struct wpa_supplicant *wpa_s, 295 struct wps_event_m2d *m2d) 296 { 297 } 298 299 static inline void wpas_dbus_signal_wps_event_fail( 300 struct wpa_supplicant *wpa_s, struct wps_event_fail *fail) 301 { 302 } 303 304 static inline void wpas_dbus_signal_wps_event_success( 305 struct wpa_supplicant *wpa_s) 306 { 307 } 308 309 static inline void wpas_dbus_signal_wps_event_pbc_overlap( 310 struct wpa_supplicant *wpa_s) 311 { 312 } 313 314 static inline int wpas_dbus_register_network(struct wpa_supplicant *wpa_s, 315 struct wpa_ssid *ssid) 316 { 317 return 0; 318 } 319 320 static inline int wpas_dbus_unregister_network(struct wpa_supplicant *wpa_s, 321 int nid) 322 { 323 return 0; 324 } 325 326 static inline int wpas_dbus_unregister_bss(struct wpa_supplicant *wpa_s, 327 u8 bssid[ETH_ALEN], unsigned int id) 328 { 329 return 0; 330 } 331 332 static inline int wpas_dbus_register_bss(struct wpa_supplicant *wpa_s, 333 u8 bssid[ETH_ALEN], unsigned int id) 334 { 335 return 0; 336 } 337 338 static inline void wpas_dbus_signal_blob_added(struct wpa_supplicant *wpa_s, 339 const char *name) 340 { 341 } 342 343 static inline void wpas_dbus_signal_blob_removed(struct wpa_supplicant *wpa_s, 344 const char *name) 345 { 346 } 347 348 static inline void wpas_dbus_signal_debug_level_changed( 349 struct wpa_global *global) 350 { 351 } 352 353 static inline void wpas_dbus_signal_debug_timestamp_changed( 354 struct wpa_global *global) 355 { 356 } 357 358 static inline void wpas_dbus_signal_debug_show_keys_changed( 359 struct wpa_global *global) 360 { 361 } 362 363 static inline int wpas_dbus_register_peer(struct wpa_supplicant *wpa_s, 364 const u8 *dev_addr) 365 { 366 return 0; 367 } 368 369 static inline int wpas_dbus_unregister_peer(struct wpa_supplicant *wpa_s, 370 const u8 *dev_addr) 371 { 372 return 0; 373 } 374 375 static inline void 376 wpas_dbus_signal_peer_groups_changed(struct wpa_supplicant *wpa_s, 377 const u8 *dev_addr) 378 { 379 } 380 381 static inline void 382 wpas_dbus_signal_p2p_group_removed(struct wpa_supplicant *wpa_s, 383 const char *role) 384 { 385 } 386 387 static inline void 388 wpas_dbus_signal_p2p_provision_discovery(struct wpa_supplicant *wpa_s, 389 const u8 *dev_addr, int request, 390 enum p2p_prov_disc_status status, 391 u16 config_methods, 392 unsigned int generated_pin) 393 { 394 } 395 396 static inline void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s, 397 const u8 *src, 398 u16 dev_passwd_id, 399 u8 go_intent) 400 { 401 } 402 403 static inline void 404 wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s, 405 int client, int persistent, 406 const u8 *ip) 407 { 408 } 409 410 static inline void 411 wpas_dbus_signal_p2p_group_formation_failure(struct wpa_supplicant *wpa_s, 412 const char *reason) 413 { 414 } 415 416 static inline void 417 wpas_dbus_register_p2p_group(struct wpa_supplicant *wpa_s, 418 struct wpa_ssid *ssid) 419 { 420 } 421 422 static inline int wpas_dbus_register_persistent_group( 423 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 424 { 425 return 0; 426 } 427 428 static inline int wpas_dbus_unregister_persistent_group( 429 struct wpa_supplicant *wpa_s, int nid) 430 { 431 return 0; 432 } 433 434 static inline void 435 wpas_dbus_signal_p2p_go_neg_resp(struct wpa_supplicant *wpa_s, 436 struct p2p_go_neg_results *res) 437 { 438 } 439 440 static inline void 441 wpas_dbus_unregister_p2p_group(struct wpa_supplicant *wpa_s, 442 const struct wpa_ssid *ssid) 443 { 444 } 445 446 static inline void wpas_dbus_signal_p2p_invitation_result( 447 struct wpa_supplicant *wpa_s, int status, 448 const u8 *bssid) 449 { 450 } 451 452 static inline void 453 wpas_dbus_register_p2p_groupmember(struct wpa_supplicant *wpa_s, 454 const u8 *p2p_if_addr) 455 { 456 } 457 458 static inline void 459 wpas_dbus_signal_p2p_sd_request(struct wpa_supplicant *wpa_s, int freq, 460 const u8 *sa, u8 dialog_token, u16 update_indic, 461 const u8 *tlvs, size_t tlvs_len) 462 { 463 } 464 465 static inline void 466 wpas_dbus_signal_p2p_sd_response(struct wpa_supplicant *wpa_s, 467 const u8 *sa, u16 update_indic, 468 const u8 *tlvs, size_t tlvs_len) 469 { 470 } 471 472 static inline void 473 wpas_dbus_unregister_p2p_groupmember(struct wpa_supplicant *wpa_s, 474 const u8 *p2p_if_addr) 475 { 476 } 477 478 static inline void 479 wpas_dbus_signal_p2p_peer_joined(struct wpa_supplicant *wpa_s, 480 const u8 *member) 481 { 482 } 483 484 static inline void 485 wpas_dbus_signal_p2p_find_stopped(struct wpa_supplicant *wpa_s) 486 { 487 } 488 489 static inline void 490 wpas_dbus_signal_peer_device_found(struct wpa_supplicant *wpa_s, 491 const u8 *dev_addr) 492 { 493 } 494 495 static inline void 496 wpas_dbus_signal_peer_device_lost(struct wpa_supplicant *wpa_s, 497 const u8 *dev_addr) 498 { 499 } 500 501 static inline void 502 wpas_dbus_signal_p2p_peer_disconnected(struct wpa_supplicant *wpa_s, 503 const u8 *member) 504 { 505 } 506 507 static inline void 508 wpas_dbus_signal_p2p_wps_failed(struct wpa_supplicant *wpa_s, 509 struct wps_event_fail *fail) 510 { 511 } 512 513 static inline void wpas_dbus_signal_certification(struct wpa_supplicant *wpa_s, 514 int depth, 515 const char *subject, 516 const char *altsubject[], 517 int num_altsubject, 518 const char *cert_hash, 519 const struct wpabuf *cert) 520 { 521 } 522 523 static inline void wpas_dbus_signal_preq(struct wpa_supplicant *wpa_s, 524 const u8 *addr, const u8 *dst, 525 const u8 *bssid, 526 const u8 *ie, size_t ie_len, 527 u32 ssi_signal) 528 { 529 } 530 531 static inline void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s, 532 const char *status, 533 const char *parameter) 534 { 535 } 536 537 static inline 538 void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s, 539 const u8 *sta) 540 { 541 } 542 543 static inline 544 void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s, 545 const u8 *sta) 546 { 547 } 548 549 static inline 550 void wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant *wpa_s, 551 const u8 *sa, const u8 *dev_addr, 552 const u8 *bssid, int id, 553 int op_freq) 554 { 555 } 556 557 #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ 558 559 #endif /* CTRL_IFACE_DBUS_H_NEW */ 560