xref: /openbsd/usr.sbin/hostapd/hostapd.h (revision 9efd6220)
1*9efd6220Shenning /*	$OpenBSD: hostapd.h,v 1.2 2005/04/13 18:31:38 henning Exp $	*/
2d2b2a2e3Sreyk 
3d2b2a2e3Sreyk /*
4d2b2a2e3Sreyk  * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net>
5d2b2a2e3Sreyk  *
6d2b2a2e3Sreyk  * Permission to use, copy, modify, and distribute this software for any
7d2b2a2e3Sreyk  * purpose with or without fee is hereby granted, provided that the above
8d2b2a2e3Sreyk  * copyright notice and this permission notice appear in all copies.
9d2b2a2e3Sreyk  *
10d2b2a2e3Sreyk  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11d2b2a2e3Sreyk  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12d2b2a2e3Sreyk  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13d2b2a2e3Sreyk  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14d2b2a2e3Sreyk  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15d2b2a2e3Sreyk  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16d2b2a2e3Sreyk  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17d2b2a2e3Sreyk  */
18d2b2a2e3Sreyk 
19d2b2a2e3Sreyk #ifndef _HOSTAPD_H
20d2b2a2e3Sreyk #define _HOSTAPD_H
21d2b2a2e3Sreyk 
22d2b2a2e3Sreyk #include <sys/param.h>
23d2b2a2e3Sreyk #include <sys/types.h>
24d2b2a2e3Sreyk #include <sys/socket.h>
25d2b2a2e3Sreyk 
26d2b2a2e3Sreyk #include <net/if.h>
27d2b2a2e3Sreyk #include <netinet/in.h>
28d2b2a2e3Sreyk #include <arpa/inet.h>
29d2b2a2e3Sreyk 
30d2b2a2e3Sreyk #include <errno.h>
31d2b2a2e3Sreyk #include <event.h>
32d2b2a2e3Sreyk #include <syslog.h>
33d2b2a2e3Sreyk 
34d2b2a2e3Sreyk #include <net80211/ieee80211.h>
35d2b2a2e3Sreyk #include <net80211/ieee80211_ioctl.h>
36d2b2a2e3Sreyk 
37d2b2a2e3Sreyk #define IEEE80211_IAPP_VERSION	0
38d2b2a2e3Sreyk 
39d2b2a2e3Sreyk /*
40d2b2a2e3Sreyk  * hostapd (IAPP) <-> Host AP (APME)
41d2b2a2e3Sreyk  */
42d2b2a2e3Sreyk 
43d2b2a2e3Sreyk #define SIOCS80211IAPP	0
44d2b2a2e3Sreyk #define SIOCG80211IAPP	1
45d2b2a2e3Sreyk 
46d2b2a2e3Sreyk struct hostapd_node {
47d2b2a2e3Sreyk 	u_int8_t	ni_macaddr[IEEE80211_ADDR_LEN];
48d2b2a2e3Sreyk 	u_int8_t	ni_bssid[IEEE80211_ADDR_LEN];
49d2b2a2e3Sreyk 	u_int32_t	ni_associd;
50d2b2a2e3Sreyk 	u_int16_t	ni_capinfo;
51d2b2a2e3Sreyk 	u_int16_t	ni_flags;
52d2b2a2e3Sreyk 	u_int16_t	ni_rxseq;
53d2b2a2e3Sreyk 	u_int16_t	ni_rssi;
54d2b2a2e3Sreyk };
55d2b2a2e3Sreyk 
56d2b2a2e3Sreyk /*
57d2b2a2e3Sreyk  * IAPP <-> IAPP
58d2b2a2e3Sreyk  */
59d2b2a2e3Sreyk 
60d2b2a2e3Sreyk struct ieee80211_iapp_frame {
61d2b2a2e3Sreyk 	u_int8_t	i_version;
62d2b2a2e3Sreyk 	u_int8_t	i_command;
63d2b2a2e3Sreyk 	u_int16_t	i_identifier;
64d2b2a2e3Sreyk 	u_int16_t	i_length;
65d2b2a2e3Sreyk } __packed;
66d2b2a2e3Sreyk 
67d2b2a2e3Sreyk enum ieee80211_iapp_frame_type {
68d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_ADD_NOTIFY			= 0,
69d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_MOVE_NOTIFY		= 1,
70d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_MOVE_RESPONSE		= 2,
71d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_SEND_SECURITY_BLOCK	= 3,
72d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_ACK_SECURITY_BLOCK		= 4,
73d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_CACHE_NOTIFY		= 5,
74d2b2a2e3Sreyk 	IEEE80211_IAPP_FRAME_CACHE_RESPONSE		= 6
75d2b2a2e3Sreyk };
76d2b2a2e3Sreyk 
77d2b2a2e3Sreyk struct ieee80211_iapp_add_notify {
78d2b2a2e3Sreyk 	u_int8_t	a_length;
79d2b2a2e3Sreyk 	u_int8_t	a_reserved;
80d2b2a2e3Sreyk 	u_int8_t	a_macaddr[IEEE80211_ADDR_LEN];
81d2b2a2e3Sreyk 	u_int16_t	a_seqnum;
82d2b2a2e3Sreyk } __packed;
83d2b2a2e3Sreyk 
84d2b2a2e3Sreyk /*
85d2b2a2e3Sreyk  * IAPP -> switches (LLC)
86d2b2a2e3Sreyk  */
87d2b2a2e3Sreyk 
88d2b2a2e3Sreyk struct hostapd_llc {
89d2b2a2e3Sreyk 	struct ether_header x_hdr;
90d2b2a2e3Sreyk 	struct llc x_llc;
91d2b2a2e3Sreyk } __packed;
92d2b2a2e3Sreyk 
93d2b2a2e3Sreyk #define IAPP_LLC	LLC_XID
94d2b2a2e3Sreyk #define IAPP_LLC_XID	0x81
95d2b2a2e3Sreyk #define IAPP_LLC_CLASS	1
96d2b2a2e3Sreyk #define IAPP_LLC_WINDOW	1 << 1
97d2b2a2e3Sreyk 
98d2b2a2e3Sreyk /*
99d2b2a2e3Sreyk  * hostapd configuration
100d2b2a2e3Sreyk  */
101d2b2a2e3Sreyk 
102d2b2a2e3Sreyk struct hostapd_counter {
103d2b2a2e3Sreyk 	u_int64_t	cn_tx_llc;	/* sent LLC messages */
104d2b2a2e3Sreyk 	u_int64_t	cn_rx_iapp;	/* received IAPP messages */
105d2b2a2e3Sreyk 	u_int64_t	cn_tx_iapp;	/* sent IAPP messages */
106d2b2a2e3Sreyk 	u_int64_t	cn_rx_apme;	/* received Host AP messages */
107d2b2a2e3Sreyk 	u_int64_t	cn_tx_apme;	/* sent Host AP messages */
108d2b2a2e3Sreyk };
109d2b2a2e3Sreyk 
110d2b2a2e3Sreyk struct hostapd_config {
111d2b2a2e3Sreyk 	int			c_apme;
112d2b2a2e3Sreyk 	int			c_apme_raw;
113d2b2a2e3Sreyk 	u_int			c_apme_rawlen;
114d2b2a2e3Sreyk 	struct event		c_apme_ev;
115d2b2a2e3Sreyk 	char			c_apme_iface[IFNAMSIZ];
116d2b2a2e3Sreyk 	int			c_apme_n;
117d2b2a2e3Sreyk 	u_int8_t		c_apme_bssid[IEEE80211_ADDR_LEN];
118d2b2a2e3Sreyk 
119d2b2a2e3Sreyk 	u_int16_t		c_iapp;
120d2b2a2e3Sreyk 	int			c_iapp_raw;
121d2b2a2e3Sreyk 	char			c_iapp_iface[IFNAMSIZ];
122d2b2a2e3Sreyk 	int			c_iapp_udp;
123d2b2a2e3Sreyk 	struct event		c_iapp_udp_ev;
124d2b2a2e3Sreyk 	u_int16_t		c_iapp_udp_port;
125d2b2a2e3Sreyk 	struct sockaddr_in	c_iapp_addr;
126d2b2a2e3Sreyk 	struct sockaddr_in	c_iapp_broadcast;
127d2b2a2e3Sreyk 	struct sockaddr_in	c_iapp_multicast;
128d2b2a2e3Sreyk 
129d2b2a2e3Sreyk 	u_int8_t		c_flags;
130d2b2a2e3Sreyk 
131d2b2a2e3Sreyk #define HOSTAPD_CFG_F_APME	0x01
132d2b2a2e3Sreyk #define HOSTAPD_CFG_F_IAPP	0x02
133d2b2a2e3Sreyk #define HOSTAPD_CFG_F_RAW	0x04
134d2b2a2e3Sreyk #define HOSTAPD_CFG_F_UDP	0x08
135d2b2a2e3Sreyk #define HOSTAPD_CFG_F_BRDCAST	0x10
136d2b2a2e3Sreyk #define HOSTAPD_CFG_F_PRIV	0x20
137d2b2a2e3Sreyk 
138d2b2a2e3Sreyk 	struct event		c_priv_ev;
139d2b2a2e3Sreyk 
140d2b2a2e3Sreyk 	char			c_config[MAXPATHLEN];
141d2b2a2e3Sreyk 
142d2b2a2e3Sreyk 	u_int			c_verbose;
143d2b2a2e3Sreyk 	u_int			c_debug;
144d2b2a2e3Sreyk 
145d2b2a2e3Sreyk 	struct hostapd_counter	c_stats;
146d2b2a2e3Sreyk };
147d2b2a2e3Sreyk 
148d2b2a2e3Sreyk #define IAPP_PORT	3517	/* XXX this should be added to /etc/services */
149d2b2a2e3Sreyk #define IAPP_MCASTADDR	"224.0.1.178"
150d2b2a2e3Sreyk #define IAPP_DLT	DLT_IEEE802_11
151d2b2a2e3Sreyk #define IAPP_MAXSIZE	512
152d2b2a2e3Sreyk 
153d2b2a2e3Sreyk #define	HOSTAPD_USER	"_hostapd"
154d2b2a2e3Sreyk 
155d2b2a2e3Sreyk #define HOSTAPD_CONFIG	"/etc/hostapd.conf"
156d2b2a2e3Sreyk 
157d2b2a2e3Sreyk #define HOSTAPD_LOG		0
158d2b2a2e3Sreyk #define HOSTAPD_LOG_VERBOSE	1
159d2b2a2e3Sreyk #define HOSTAPD_LOG_DEBUG	2
160d2b2a2e3Sreyk 
161d2b2a2e3Sreyk __BEGIN_DECLS
162d2b2a2e3Sreyk 
163d2b2a2e3Sreyk void	 hostapd_log(u_int, const char *, ...);
164d2b2a2e3Sreyk void	 hostapd_fatal(const char *, ...);
165d2b2a2e3Sreyk int	 hostapd_bpf_open(u_int);
166d2b2a2e3Sreyk void	 hostapd_cleanup(struct hostapd_config *);
167d2b2a2e3Sreyk int	 hostapd_check_file_secrecy(int, const char *);
168d2b2a2e3Sreyk 
169d2b2a2e3Sreyk int	 hostapd_parse_file(struct hostapd_config *);
170d2b2a2e3Sreyk int	 hostapd_parse_symset(char *);
171d2b2a2e3Sreyk 
172d2b2a2e3Sreyk void	 hostapd_priv_init(struct hostapd_config *);
173d2b2a2e3Sreyk int	 hostapd_priv_llc_xid(struct hostapd_config *, struct hostapd_node *);
174d2b2a2e3Sreyk void	 hostapd_priv_apme_bssid(struct hostapd_config *);
175*9efd6220Shenning int	 hostapd_priv_apme_getnode(struct hostapd_config *,
176*9efd6220Shenning 	    struct hostapd_node *);
177*9efd6220Shenning int	 hostapd_priv_apme_delnode(struct hostapd_config *,
178*9efd6220Shenning 	    struct hostapd_node *);
179d2b2a2e3Sreyk 
180d2b2a2e3Sreyk void	 hostapd_apme_init(struct hostapd_config *);
181d2b2a2e3Sreyk void	 hostapd_apme_input(int, short, void *);
182d2b2a2e3Sreyk 
183d2b2a2e3Sreyk void	 hostapd_iapp_init(struct hostapd_config *);
184d2b2a2e3Sreyk void	 hostapd_iapp_term(struct hostapd_config *);
185*9efd6220Shenning int	 hostapd_iapp_add_notify(struct hostapd_config *,
186*9efd6220Shenning 	    struct hostapd_node *);
187d2b2a2e3Sreyk void	 hostapd_iapp_input(int, short, void *);
188d2b2a2e3Sreyk 
189d2b2a2e3Sreyk void	 hostapd_llc_init(struct hostapd_config *);
190d2b2a2e3Sreyk int	 hostapd_llc_send_xid(struct hostapd_config *, struct hostapd_node *);
191d2b2a2e3Sreyk 
192d2b2a2e3Sreyk __END_DECLS
193d2b2a2e3Sreyk 
194d2b2a2e3Sreyk #endif /* _HOSTAPD_H */
195