#ifndef DHCPCD_SOCKET
#define DHCPCD_SOCKET "/var/run/dhcpcd.sock"
#endif
+#ifndef DHCPCD_UNPRIV_SOCKET
+#define DHCPCD_UNPRIV_SOCKET "/var/run/dhcpcd.unpriv.sock"
+#endif
#ifndef WPA_CTRL_DIR
#define WPA_CTRL_DIR "/var/run/wpa_supplicant"
#define DHCPCD_RETRYOPEN 100 /* milliseconds */
#define DHCPCD_WI_HIST_MAX 10 /* Recall 10 scans for averages */
-#define IF_SSIDSIZE 33
+/* Each non printable byte of the SSID is represented as \000 */
+#define IF_SSIDSIZE ((32 * 4) + 1)
#define IF_BSSIDSIZE 64
#define FLAGSIZE 64
#define TYPESIZE 8
DHCPCD_WI_AV quality;
DHCPCD_WI_AV noise;
DHCPCD_WI_AV level;
+ DHCPCD_WI_AV strength;
char ssid[IF_SSIDSIZE];
char flags[FLAGSIZE];
} DHCPCD_WI_SCAN;
int quality;
int noise;
int level;
+ int strength;
} DHCPCD_WI_HIST;
typedef struct dhcpcd_wpa {
typedef struct dhcpcd_connection {
struct dhcpcd_connection *next;
bool open;
+ bool privileged;
int command_fd;
int listen_fd;
+ const char *progname;
DHCPCD_IF *interfaces;
DHCPCD_WPA *wpa;
void *if_context;
void (*status_cb)(struct dhcpcd_connection *, const char *, void *);
void *status_context;
+ bool wpa_started;
void (*wi_scanresults_cb)(DHCPCD_WPA *, void *);
void *wi_scanresults_context;
void (*wpa_status_cb)(DHCPCD_WPA *, const char *, void *);
DHCPCD_CONNECTION * dhcpcd_new(void);
const char * dhcpcd_version(DHCPCD_CONNECTION *);
+void dhcpcd_set_progname(DHCPCD_CONNECTION *, const char *);
+const char * dhcpcd_get_progname(const DHCPCD_CONNECTION *);
const char * dhcpcd_status(DHCPCD_CONNECTION *);
const char * dhcpcd_cffile(DHCPCD_CONNECTION *);
bool dhcpcd_realloc(DHCPCD_CONNECTION *, size_t);
-int dhcpcd_open(DHCPCD_CONNECTION *);
+int dhcpcd_open(DHCPCD_CONNECTION *, bool priv);
void dhcpcd_close(DHCPCD_CONNECTION *);
void dhcpcd_free(DHCPCD_CONNECTION *);
void dhcpcd_set_if_callback(DHCPCD_CONNECTION *,
void dhcpcd_set_status_callback(DHCPCD_CONNECTION *,
void (*)(DHCPCD_CONNECTION *, const char *, void *), void *);
int dhcpcd_get_fd(DHCPCD_CONNECTION *);
+bool dhcpcd_privileged(DHCPCD_CONNECTION *);
void dhcpcd_dispatch(DHCPCD_CONNECTION *);
DHCPCD_IF * dhcpcd_interfaces(DHCPCD_CONNECTION *);
DHCPCD_IF * dhcpcd_get_if(DHCPCD_CONNECTION *, const char *, const char *);
#define dhcpcd_rebind(c, i) dhcpcd_command_arg((c), "-n", (i), NULL)
#define dhcpcd_release(c, i) dhcpcd_command_arg((c), "-k", (i), NULL)
+void dhcpcd_wpa_start(DHCPCD_CONNECTION *);
DHCPCD_WPA *dhcpcd_wpa_find(DHCPCD_CONNECTION *, const char *);
DHCPCD_WPA *dhcpcd_wpa_new(DHCPCD_CONNECTION *, const char *);
DHCPCD_CONNECTION *dhcpcd_wpa_connection(DHCPCD_WPA *);
char * dhcpcd_wpa_network_get(DHCPCD_WPA *, int, const char *);
bool dhcpcd_wpa_network_set(DHCPCD_WPA *, int, const char *, const char *);
+#define DHCPCD_WPA_SUCCESS 0
+#define DHCPCD_WPA_ERR -1
+#define DHCPCD_WPA_ERR_SET -2
+#define DHCPCD_WPA_ERR_SET_PSK -3
+#define DHCPCD_WPA_ERR_ENABLE -4
+#define DHCPCD_WPA_ERR_WRITE -5
+#define DHCPCD_WPA_ERR_ASSOC -6
+int dhcpcd_wpa_configure_psk(DHCPCD_WPA *w, DHCPCD_WI_SCAN *s, const char *p);
+
char ** dhcpcd_config_blocks(DHCPCD_CONNECTION *, const char *);
DHCPCD_OPTION *dhcpcd_config_read(DHCPCD_CONNECTION *,
const char *, const char *);
const char * dhcpcd_config_get_static(DHCPCD_OPTION *, const char *);
bool dhcpcd_config_set(DHCPCD_OPTION **, const char *, const char *);
bool dhcpcd_config_set_static(DHCPCD_OPTION **, const char *, const char *);
+bool dhcpcd_config_writeable(DHCPCD_CONNECTION *con);
bool dhcpcd_config_write(DHCPCD_CONNECTION *,
const char *, const char *, const DHCPCD_OPTION *);