/* ipwps_common.h - IPWPS Common header file */ /* * Copyright (c) 2009 Wind River Systems, Inc. * * The right to copy, distribute, modify, or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. * */ /* modification history -------------------- 01b,05mar09,mry Add priliminary enrollee support 01a,02Feb09,mry Created */ #ifndef IPWPS_COMMON_H #define IPWPS_COMMON_H /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* This is a common header file that may be included by internal WPS modules * as well as external modules and applications using ipwps. * It defines common ipwps structures and types. */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #include #include #ifdef __cplusplus extern "C" { #endif /* **************************************************************************** * 4 DEFINES **************************************************************************** */ #define IPWPS_UUID_SIZE 16 #define IPWPS_MAX_WSC_ID_LEN 128 #define IPWPS_MAX_EAP_ID_LEN 64 #define IPWPS_MAX_IFNAME 16 #define IPWPS_DEVICE_INFO_SIZE 32 #define IPWPS_DEVICE_INFO_STRLEN (IPWPS_DEVICE_INFO_SIZE+1) #define IPWPS_DEVICE_INFO_MANUFACTURER_SIZE 64 #define IPWPS_DEVICE_INFO_MANUFACTURER_STRLEN (IPWPS_DEVICE_INFO_MANUFACTURER_SIZE+1) #define IPWPS_CREDENTIALS_CONFIG_METHOD_STRLEN 32 /* Max size of a reassembled WPS Protocol message (too generous?)*/ #define IPWPS_PROTO_MSG_DATALEN_MAX 1024 /* WPS "CONFIGURATION ERROR" VALUES */ #define IPWPS_CONFIG_ERROR_NOERR 0 #define IPWPS_CONFIG_ERROR_OOBIF_READERR 1 #define IPWPS_CONFIG_ERROR_DECRYPT_CRCFAIL 2 #define IPWPS_CONFIG_ERROR_2_4CHAN_NOT_SUPP 3 #define IPWPS_CONFIG_ERROR_5_0CHAN_NOT_SUPP 4 #define IPWPS_CONFIG_ERROR_SIGNAL_TOOWEAK 5 #define IPWPS_CONFIG_ERROR_NET_AUTHFAIL 6 #define IPWPS_CONFIG_ERROR_NET_ASSOCFAIL 7 #define IPWPS_CONFIG_ERROR_NO_DHCPRESP 8 #define IPWPS_CONFIG_ERROR_FAIL_DHCPCONFIG 9 #define IPWPS_CONFIG_ERROR_IPADDR_CONFLICT 10 #define IPWPS_CONFIG_ERROR_REGCONN_FAIL 11 #define IPWPS_CONFIG_ERROR_MULTI_PBCSESSION 12 #define IPWPS_CONFIG_ERROR_ROGUE_ACTIVITY 13 #define IPWPS_CONFIG_ERROR_DEVICE_BUSY 14 #define IPWPS_CONFIG_ERROR_SETUP_LOCKED 15 #define IPWPS_CONFIG_ERROR_MSG_TIMEOUT 16 #define IPWPS_CONFIG_ERROR_REGSESSION_TIMEOUT 17 #define IPWPS_CONFIG_ERROR_DEVPWD_AUTHFAIL 18 /* WPS "ASSOCIATION STATE" VALUES */ #define IPWPS_ASSOC_STATE_NOT_ASSOCIATED 0 #define IPWPS_ASSOC_STATE_CONN_SUCCESS 1 #define IPWPS_ASSOC_STATE_CONFIG_FAIL 2 #define IPWPS_ASSOC_STATE_ASSOC_FAIL 3 #define IPWPS_ASSOC_STATE_IP_FAIL 4 /* WPS "AUTHENTICATION TYPE FLAGS" VALUES */ #define IPWPS_AUTH_TYPE_OPEN 0x0001 #define IPWPS_AUTH_TYPE_WPAPSK 0x0002 #define IPWPS_AUTH_TYPE_SHARED 0x0004 #define IPWPS_AUTH_TYPE_WPA 0x0008 #define IPWPS_AUTH_TYPE_WPA2 0x0010 #define IPWPS_AUTH_TYPE_WPA2PSK 0x0020 /* WPS "ENCRYPTION TYPE FLAGS" VALUES */ #define IPWPS_ENCRYPT_TYPE_NONE 0x0001 #define IPWPS_ENCRYPT_TYPE_WEP 0x0002 #define IPWPS_ENCRYPT_TYPE_TKIP 0x0004 #define IPWPS_ENCRYPT_TYPE_AES 0x0008 /* WPS "CONFIG METHODS" VALUES */ #define IPWPS_CONFIG_METHOD_USBA 0x0001 #define IPWPS_CONFIG_METHOD_ETHERNET 0x0002 #define IPWPS_CONFIG_METHOD_LABEL 0x0004 #define IPWPS_CONFIG_METHOD_DISPLAY 0x0008 #define IPWPS_CONFIG_METHOD_EXTNFCTOK 0x0010 #define IPWPS_CONFIG_METHOD_INTNFCTOK 0x0020 #define IPWPS_CONFIG_METHOD_NFCIF 0x0040 #define IPWPS_CONFIG_METHOD_PUSHBUTTON 0x0080 #define IPWPS_CONFIG_METHOD_KEYPAD 0x0100 /* WPS "CONNECTION TYPE FLAGS" VALUES */ #define IPWPS_CONNECTION_TYPE_ESS 0x01 #define IPWPS_CONNECTION_TYPE_IBSS 0x02 /* WPS "RF BANDS" VALUES */ #define IPWPS_RFBAND_2_4GHZ 0x01 #define IPWPS_RFBAND_5_0GHZ 0x02 /* WPS "DRIVER CURRENT MODE */ #define IPWPS_DRV_MODE_AP 0x01 #define IPWPS_DRV_MODE_INFRA 0x02 #define IPWPS_DRV_MODE_ADHOC 0x04 #define IPWPS_PROTO_VERSION_DECODE_MAJOR(ver) (((ver) & 0xf0) >> 4) #define IPWPS_PROTO_VERSION_DECODE_MINOR(ver) ((ver & 0x0f)) /* Maximum # of credentials supported */ #define IPWPS_NUM_CEDENTIALS_MAX 4 #define IPWPS_SSID_MAXLEN 32 /* excluding null terminating character */ #define IPWPS_PROTO_NETWORK_KEY_MAXLEN 64 #define IPWPS_PROTO_PASSWORD_MAXLEN 64 #define IPWPS_PASSPHRASE_MINLEN 8 #define IPWPS_KEYINDEX_MIN 1 #define IPWPS_KEYINDEX_MAX 255 #define IPWPS_KEYINDEX_DEFAULT 1 #define IPWPS_NETINDEX_MIN 1 #define IPWPS_NETINDEX_MAX 255 #define IPWPS_NETINDEX_DEFAULT 1 #define IPWPS_PIN_MAXLEN 8 #define IPWPS_DEVICE_PASSWORD_MAXLEN 32 #define IPWPS_PINMODE_MAXLEN 32 /* String describing the PIN mode (includes NULL terminating character) */ /* IPWPS PIN MODE SYSVAR VALUES (MAKE SURE LENGTH WITH NULL TERMINATING CHARACTER IS <= IPWPS_PINMODE_MAXLEN) */ #define IPWPS_PINMODE_AUTO "auto" #define IPWPS_PINMODE_HARDCODE "hardcoded" #define IPWPS_PINMODE_INTERACT_USER "interactive_user" #define IPWPS_PINMODE_INTERACT_REGS "interactive_regs" /* IPWPS EAP Identities */ #define IPWPS_EAP_ID_ENROLEE "WFA-SimpleConfig-Enrollee-1-0" /* IPWPS Credential Configuration methods (Make sure strlen of each is < IPWPS_CREDENTIALS_CONFIG_METHOD_STRLEN) */ #define IPWPS_CRED_CONFIG_METHOD_AUTO "auto" #define IPWPS_CRED_CONFIG_METHOD_DEFAULT "default" #define IPWPS_CRED_CONFIG_METHOD_INTERACT "interact" /* IPWPS Credential Configuration values */ #define IPWPS_CRED_AUTH_OPEN "open" #define IPWPS_CRED_AUTH_WPA "wpa" #define IPWPS_CRED_AUTH_WPA2 "wpa2" #define IPWPS_CRED_AUTH_ALL "all" #define IPWPS_CRED_ENCR_TKIP "tkip" #define IPWPS_CRED_ENCR_AES "aes" #define IPWPS_CRED_ENCR_ALL "all" /* WPS Timer Values */ #define IPWPS_WALK_TIME_SECONDS 120 #define IPWPS_MONITOR_TIME_SECONDS 120 #define IPWPS_PROTO_COMPLETE_SECONDS 120 /* Overall timeout for WPS Protocol exchange to complete */ #define IPWPS_DEVICE_PASSWORD_PENDING_SECONDS 30 /* Time to wait for user to enter a PIN to be entered */ /* Common macros */ #define IPWPS_BOOL_STRING(boolval) ((boolval) ? "TRUE" : "FALSE") #define IPWPS_ENABLED_STRING(boolval) ((boolval) ? "Enabled" : "Disabled") #define IPWPS_ENABLED_STRING_CAPS(boolval) ((boolval) ? "ENABLED" : "DISABLED") /* **************************************************************************** * 5 TYPES **************************************************************************** */ typedef enum { IPWPS_UUID_E, IPWPS_UUID_R, IPWPS_AP_UUID_E } Ipwps_uuid_specifier; /* WPS Session Status */ typedef enum { IPWPS_SESSION_STATUS_IDLE = 0, /* Clear previous status */ IPWPS_SESSION_STATUS_IN_PROGRESS, IPWPS_SESSION_STATUS_ERROR, IPWPS_SESSION_STATUS_SESSION_OVERLAP, IPWPS_SESSION_STATUS_SUCCESS, IPWPS_ENROLLEE_JOIN_SUCCESS, IPWPS_ENROLLEE_JOIN_FAIL } Ipwps_session_status; /* IPWPS PIN MODE VALUES */ typedef enum { IPWPS_PINMODE_VAL_AUTO, IPWPS_PINMODE_VAL_HARDCODE, IPWPS_PINMODE_VAL_INTERACT_USER, IPWPS_PINMODE_VAL_INTERACT_REGS } ipwps_pin_mode; /* WPS AP Status */ typedef enum { IPWPS_AP_STATUS_IDLE = 0, IPWPS_AP_STATUS_INIT, IPWPS_AP_STATUS_RUNNING, IPWPS_AP_STATUS_ERROR = -1 } Ipwps_ap_status; /* WPS Registrar Status */ typedef enum { IPWPS_REGISTRAR_STATUS_IDLE = 0, IPWPS_REGISTRAR_STATUS_READY, IPWPS_REGISTRAR_STATUS_SELECTED, IPWPS_REGISTRAR_STATUS_ERROR = -1 } Ipwps_registrar_status; /* WPS Enrollee Status */ typedef enum { IPWPS_ENROLLEE_STATUS_IDLE = 0, IPWPS_ENROLLEE_STATUS_STARTED, IPWPS_ENROLLEE_STATUS_ERROR = -1 } Ipwps_enrollee_status; /* WPS Enrollee AP Join Status */ typedef enum { IPWPS_ENROLLEE_APJOIN_STATUS_NOT_ATTEMPTED = 0, IPWPS_ENROLLEE_APJOIN_STATUS_SUCCESSFUL, IPWPS_ENROLLEE_APJOIN_STATUS_FAILED = -1 } Ipwps_enrollee_apjoin_status; /* WPS "DEVICE PASSWORD ID" */ typedef enum { IPWPS_DEVPWDID_INVALID = 0, IPWPS_DEVPWDID_DEFAULT_PIN, IPWPS_DEVPWDID_USER_SPECIFIED, IPWPS_DEVPWDID_MACHINE_SPECIFIED, IPWPS_DEVPWDID_PUSHBUTTON, IPWPS_DEVPWDID_REGISTRAR_SPECIFIED } Ipwps_device_pwdid; typedef enum { IPWPS_PEER_UNKNOWN = 0, IPWPS_PEER_ENROLLEE, IPWPS_PEER_AP, IPWPS_PEER_REGISTRAR } Ipwps_peer_type; /* IPWPS Credential Method */ typedef enum { IPWPS_CERDENTIAL_METHOD_NOTSET = 0, IPWPS_CERDENTIAL_METHOD_AUTO, IPWPS_CERDENTIAL_METHOD_DEFAULT, IPWPS_CERDENTIAL_METHOD_INTERACTIVE } Ipwps_credential_method; typedef struct { Ip_bool valid; Ipwps_peer_type type; Ip_u8 rf_band; char ssid[IPWPS_SSID_MAXLEN+1]; Ip_u8 bssid[6]; Ip_u8 mac_addr[6]; } Ipwps_peer_info; typedef struct Ipwps_device_type_st { Ip_u16 category_id; Ip_u16 subcat_id; Ip_u8 oui[4]; } Ipwps_device_type; /* WPS Protocol data struct */ typedef struct Ipwps_proto_data_st { Ip_u16 len; Ip_u8 data[IPWPS_PROTO_MSG_DATALEN_MAX]; } Ipwps_proto_data; typedef enum { IPWPS_OPSTATUS_OK = 0, IPWPS_OPSTATUS_PENDING, IPWPS_OPSTATUS_FAIL = -1, IPWPS_OPSTATUS_TIMEOUT = -2 } Ipwps_operation_status; typedef enum { IPWPS_PBC_EVENT_PUSHBUTTON } Ipwps_pbc_event; typedef enum { IPWPS_PIN_EVENT_SETPIN, IPWPS_PIN_EVENT_GETPIN, IPWPS_PIN_EVENT_NEWPIN, /* Generate a new PIN if in auto PIN mode */ IPWPS_PIN_EVENT_SET_CM /* Set the current PIN Config Method */ } Ipwps_pin_event; typedef enum { IPWPS_ENROLLEE_EVENT_START, IPWPS_ENROLLEE_EVENT_STOP } Ipwps_enrollee_event; typedef enum { IPWPS_REGISTRAR_EVENT_START, IPWPS_REGISTRAR_EVENT_STOP } Ipwps_registrar_event; typedef enum { IPWPS_CREDENTIAL_EVENT_SETMETHOD, IPWPS_CREDENTIAL_EVENT_ADDCRED, IPWPS_CREDENTIAL_EVENT_DELCRED, IPWPS_CREDENTIAL_EVENT_NEWCRED } Ipwps_credential_event; typedef union { Ipwps_pbc_event pbc_event; Ipwps_pin_event pin_event; Ipwps_enrollee_event enrollee_event; Ipwps_registrar_event registrar_event; Ipwps_credential_event credential_event; } Ipwps_event_type; typedef struct Ipwps_event_data_st { Ip_bool valid; /* Set to IP_TRUE if the event_data is valid (i.e. contains something) */ union { Ip_u16 config_method; struct { Ip_u8 val[IPWPS_PIN_MAXLEN+1]; /* Null terminated string containing the pin */ Ipwps_device_pwdid dev_pwdid; /* Device Password Id for pin. One of: * IPWPS_DEVPWDID_DEFAULT_PIN * IPWPS_DEVPWDID_USER_SPECIFIED * IPWPS_DEVPWDID_REGISTRAR_SPECIFIED */ } pin; Ipwps_credential_method credential_method; /* Used by the IPWPS_CREDENTIAL_EVENT_SETMETHOD event */ Ip_u16 credential_setno; /* Set # for the credential specified by the IPWPS_CREDENTIAL_EVENT_ADDCRED/IPWPS_CREDENTIAL_EVENT_DELCRED event */ } u; } Ipwps_event_data; typedef struct Ipwps_event_msg_st { Ipwps_event_type event_type; Ipwps_event_data event_data; } Ipwps_event_msg; typedef struct Ipwps_dev_pwd_container_st { Ip_u8 pwd[IPWPS_DEVICE_PASSWORD_MAXLEN]; Ip_u16 len; } Ipwps_dev_pwd_container; /* WPS Capability Information */ typedef struct Ipwps_capability_info_st { Ip_u8 conn_types; /* Bit-ORed values from WPS "CONNECTION TYPE FLAGS" VALUES in "ipwps_common.h" */ Ip_u16 auth_types; /* Bit-ORed values from WPS "AUTHENTICATION TYPE FLAGS" VALUES in "ipwps_common.h" */ Ip_u16 encr_types; /* Bit-ORed values from WPS "ENCRYPTION TYPE FLAGS" VALUES in "ipwps_common.h" */ Ip_u16 config_methods; /* Bit-ORed values from WPS "CONFIG METHODS" VALUES in "ipwps_common.h" */ } Ipwps_capability_info; /* **************************************************************************** * END OF FILE **************************************************************************** */ #ifdef __cplusplus } #endif #endif