18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPA Supplicant / UNIX domain socket -based control interface
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2004-2005, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef CTRL_IFACE_H
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define CTRL_IFACE_H
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_CTRL_IFACE
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* Shared functions from ctrl_iface.c; to be called by ctrl_iface backends */
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_ctrl_iface_process - Process ctrl_iface command
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @wpa_s: Pointer to wpa_supplicant data
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: Received command buffer (nul terminated string)
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @resp_len: Variable to be set to the response length
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Response (*resp_len bytes) or %NULL on failure
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Control interface backends call this function when receiving a message that
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * they do not process internally, i.e., anything else than ATTACH, DETACH,
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * and LEVEL. The return response value is then sent to the external program
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * that sent the command. Caller is responsible for freeing the buffer after
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * this. If %NULL is returned, *resp_len can be set to two special values:
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1 = send "FAIL\n" response, 2 = send "OK\n" response. If *resp_len has any
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * other value, no response is sent.
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					 char *buf, size_t *resp_len);
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_ctrl_iface_process - Process global ctrl_iface command
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @global: Pointer to global data from wpa_supplicant_init()
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: Received command buffer (nul terminated string)
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @resp_len: Variable to be set to the response length
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Response (*resp_len bytes) or %NULL on failure
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Control interface backends call this function when receiving a message from
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * the global ctrl_iface connection. The return response value is then sent to
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * the external program that sent the command. Caller is responsible for
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * freeing the buffer after this. If %NULL is returned, *resp_len can be set to
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * two special values: 1 = send "FAIL\n" response, 2 = send "OK\n" response. If
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * *resp_len has any other value, no response is sent.
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * wpa_supplicant_global_ctrl_iface_process(struct wpa_global *global,
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt						char *buf, size_t *resp_len);
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* Functions that each ctrl_iface backend must implement */
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_ctrl_iface_init - Initialize control interface
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @wpa_s: Pointer to wpa_supplicant data
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Pointer to private data on success, %NULL on failure
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Initialize the control interface and start receiving commands from external
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * programs.
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Required to be implemented in each control interface backend.
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ctrl_iface_priv *
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s);
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_ctrl_iface_deinit - Deinitialize control interface
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @priv: Pointer to private data from wpa_supplicant_ctrl_iface_init()
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Deinitialize the control interface that was initialized with
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_ctrl_iface_init().
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Required to be implemented in each control interface backend.
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_supplicant_ctrl_iface_deinit(struct ctrl_iface_priv *priv);
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_ctrl_iface_wait - Wait for ctrl_iface monitor
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @priv: Pointer to private data from wpa_supplicant_ctrl_iface_init()
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Wait until the first message from an external program using the control
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * interface is received. This function can be used to delay normal startup
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * processing to allow control interface programs to attach with
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * %wpa_supplicant before normal operations are started.
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Required to be implemented in each control interface backend.
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_supplicant_ctrl_iface_wait(struct ctrl_iface_priv *priv);
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_global_ctrl_iface_init - Initialize global control interface
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @global: Pointer to global data from wpa_supplicant_init()
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Pointer to private data on success, %NULL on failure
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Initialize the global control interface and start receiving commands from
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * external programs.
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Required to be implemented in each control interface backend.
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ctrl_iface_global_priv *
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_global_ctrl_iface_init(struct wpa_global *global);
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_global_ctrl_iface_deinit - Deinitialize global ctrl interface
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @priv: Pointer to private data from wpa_supplicant_global_ctrl_iface_init()
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Deinitialize the global control interface that was initialized with
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant_global_ctrl_iface_init().
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Required to be implemented in each control interface backend.
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_supplicant_global_ctrl_iface_deinit(
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct ctrl_iface_global_priv *priv);
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_CTRL_IFACE */
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct ctrl_iface_priv *
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return (void *) -1;
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_ctrl_iface_deinit(struct ctrl_iface_priv *priv)
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void
1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_ctrl_iface_send(struct ctrl_iface_priv *priv, int level,
1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       char *buf, size_t len)
1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void
1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_ctrl_iface_wait(struct ctrl_iface_priv *priv)
1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct ctrl_iface_global_priv *
1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return (void *) 1;
1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void
1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_supplicant_global_ctrl_iface_deinit(struct ctrl_iface_global_priv *priv)
1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_CTRL_IFACE */
1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CTRL_IFACE_H */
154