1*3ff40c12SJohn Marino /* 2*3ff40c12SJohn Marino * Wi-Fi Protected Setup - External Registrar 3*3ff40c12SJohn Marino * Copyright (c) 2009, Jouni Malinen <j@w1.fi> 4*3ff40c12SJohn Marino * 5*3ff40c12SJohn Marino * This software may be distributed under the terms of the BSD license. 6*3ff40c12SJohn Marino * See README for more details. 7*3ff40c12SJohn Marino */ 8*3ff40c12SJohn Marino 9*3ff40c12SJohn Marino #ifndef WPS_ER_H 10*3ff40c12SJohn Marino #define WPS_ER_H 11*3ff40c12SJohn Marino 12*3ff40c12SJohn Marino #include "utils/list.h" 13*3ff40c12SJohn Marino 14*3ff40c12SJohn Marino struct wps_er_sta { 15*3ff40c12SJohn Marino struct dl_list list; 16*3ff40c12SJohn Marino struct wps_er_ap *ap; 17*3ff40c12SJohn Marino u8 addr[ETH_ALEN]; 18*3ff40c12SJohn Marino u16 config_methods; 19*3ff40c12SJohn Marino u8 uuid[WPS_UUID_LEN]; 20*3ff40c12SJohn Marino u8 pri_dev_type[8]; 21*3ff40c12SJohn Marino u16 dev_passwd_id; 22*3ff40c12SJohn Marino int m1_received; 23*3ff40c12SJohn Marino char *manufacturer; 24*3ff40c12SJohn Marino char *model_name; 25*3ff40c12SJohn Marino char *model_number; 26*3ff40c12SJohn Marino char *serial_number; 27*3ff40c12SJohn Marino char *dev_name; 28*3ff40c12SJohn Marino struct wps_data *wps; 29*3ff40c12SJohn Marino struct http_client *http; 30*3ff40c12SJohn Marino struct wps_credential *cred; 31*3ff40c12SJohn Marino }; 32*3ff40c12SJohn Marino 33*3ff40c12SJohn Marino struct wps_er_ap { 34*3ff40c12SJohn Marino struct dl_list list; 35*3ff40c12SJohn Marino struct wps_er *er; 36*3ff40c12SJohn Marino struct dl_list sta; /* list of STAs/Enrollees using this AP */ 37*3ff40c12SJohn Marino struct in_addr addr; 38*3ff40c12SJohn Marino char *location; 39*3ff40c12SJohn Marino struct http_client *http; 40*3ff40c12SJohn Marino struct wps_data *wps; 41*3ff40c12SJohn Marino 42*3ff40c12SJohn Marino u8 uuid[WPS_UUID_LEN]; 43*3ff40c12SJohn Marino u8 pri_dev_type[8]; 44*3ff40c12SJohn Marino u8 wps_state; 45*3ff40c12SJohn Marino u8 mac_addr[ETH_ALEN]; 46*3ff40c12SJohn Marino char *friendly_name; 47*3ff40c12SJohn Marino char *manufacturer; 48*3ff40c12SJohn Marino char *manufacturer_url; 49*3ff40c12SJohn Marino char *model_description; 50*3ff40c12SJohn Marino char *model_name; 51*3ff40c12SJohn Marino char *model_number; 52*3ff40c12SJohn Marino char *model_url; 53*3ff40c12SJohn Marino char *serial_number; 54*3ff40c12SJohn Marino char *udn; 55*3ff40c12SJohn Marino char *upc; 56*3ff40c12SJohn Marino 57*3ff40c12SJohn Marino char *scpd_url; 58*3ff40c12SJohn Marino char *control_url; 59*3ff40c12SJohn Marino char *event_sub_url; 60*3ff40c12SJohn Marino 61*3ff40c12SJohn Marino int subscribed; 62*3ff40c12SJohn Marino u8 sid[WPS_UUID_LEN]; 63*3ff40c12SJohn Marino unsigned int id; 64*3ff40c12SJohn Marino 65*3ff40c12SJohn Marino struct wps_credential *ap_settings; 66*3ff40c12SJohn Marino 67*3ff40c12SJohn Marino void (*m1_handler)(struct wps_er_ap *ap, struct wpabuf *m1); 68*3ff40c12SJohn Marino }; 69*3ff40c12SJohn Marino 70*3ff40c12SJohn Marino struct wps_er_ap_settings { 71*3ff40c12SJohn Marino struct dl_list list; 72*3ff40c12SJohn Marino u8 uuid[WPS_UUID_LEN]; 73*3ff40c12SJohn Marino struct wps_credential ap_settings; 74*3ff40c12SJohn Marino }; 75*3ff40c12SJohn Marino 76*3ff40c12SJohn Marino struct wps_er { 77*3ff40c12SJohn Marino struct wps_context *wps; 78*3ff40c12SJohn Marino char ifname[17]; 79*3ff40c12SJohn Marino int forced_ifname; 80*3ff40c12SJohn Marino u8 mac_addr[ETH_ALEN]; /* mac addr of network i.f. we use */ 81*3ff40c12SJohn Marino char *ip_addr_text; /* IP address of network i.f. we use */ 82*3ff40c12SJohn Marino unsigned ip_addr; /* IP address of network i.f. we use (host order) */ 83*3ff40c12SJohn Marino int multicast_sd; 84*3ff40c12SJohn Marino int ssdp_sd; 85*3ff40c12SJohn Marino struct dl_list ap; 86*3ff40c12SJohn Marino struct dl_list ap_unsubscribing; 87*3ff40c12SJohn Marino struct dl_list ap_settings; 88*3ff40c12SJohn Marino struct http_server *http_srv; 89*3ff40c12SJohn Marino int http_port; 90*3ff40c12SJohn Marino unsigned int next_ap_id; 91*3ff40c12SJohn Marino unsigned int event_id; 92*3ff40c12SJohn Marino int deinitializing; 93*3ff40c12SJohn Marino void (*deinit_done_cb)(void *ctx); 94*3ff40c12SJohn Marino void *deinit_done_ctx; 95*3ff40c12SJohn Marino struct in_addr filter_addr; 96*3ff40c12SJohn Marino int skip_set_sel_reg; 97*3ff40c12SJohn Marino const u8 *set_sel_reg_uuid_filter; 98*3ff40c12SJohn Marino }; 99*3ff40c12SJohn Marino 100*3ff40c12SJohn Marino 101*3ff40c12SJohn Marino /* wps_er.c */ 102*3ff40c12SJohn Marino void wps_er_ap_add(struct wps_er *er, const u8 *uuid, struct in_addr *addr, 103*3ff40c12SJohn Marino const char *location, int max_age); 104*3ff40c12SJohn Marino void wps_er_ap_remove(struct wps_er *er, struct in_addr *addr); 105*3ff40c12SJohn Marino int wps_er_ap_cache_settings(struct wps_er *er, struct in_addr *addr); 106*3ff40c12SJohn Marino 107*3ff40c12SJohn Marino /* wps_er_ssdp.c */ 108*3ff40c12SJohn Marino int wps_er_ssdp_init(struct wps_er *er); 109*3ff40c12SJohn Marino void wps_er_ssdp_deinit(struct wps_er *er); 110*3ff40c12SJohn Marino void wps_er_send_ssdp_msearch(struct wps_er *er); 111*3ff40c12SJohn Marino 112*3ff40c12SJohn Marino #endif /* WPS_ER_H */ 113