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