mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-27 01:11:06 +00:00
106 lines
2.2 KiB
C
106 lines
2.2 KiB
C
|
/*
|
||
|
* \brief Socket interface for calling the Linux WIFI stack
|
||
|
* \author Josef Soentgen
|
||
|
* \date 2012-08-02
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Copyright (C) 2014 Genode Labs GmbH
|
||
|
*
|
||
|
* This file is part of the Genode OS framework, which is distributed
|
||
|
* under the terms of the GNU General Public License version 2.
|
||
|
*/
|
||
|
|
||
|
#ifndef _WIFI__SOCKET_CALL_H_
|
||
|
#define _WIFI__SOCKET_CALL_H_
|
||
|
|
||
|
|
||
|
namespace Wifi {
|
||
|
struct Socket;
|
||
|
struct Sockaddr;
|
||
|
struct Msghdr;
|
||
|
struct Socket_call;
|
||
|
struct Poll_socket_fd;
|
||
|
|
||
|
/*
|
||
|
* XXX We need the WIFI_ prefix because SOL_SOCKET and friends are
|
||
|
* preprocessor macros.
|
||
|
*/
|
||
|
|
||
|
enum Flags { WIFI_F_NONE, WIFI_F_MSG_ERRQUEUE };
|
||
|
enum Sockopt_level { WIFI_SOL_SOCKET, WIFI_SOL_NETLINK };
|
||
|
enum Sockopt_name {
|
||
|
/* SOL_SOCKET */
|
||
|
WIFI_SO_SNDBUF,
|
||
|
WIFI_SO_RCVBUF,
|
||
|
WIFI_SO_PASSCRED,
|
||
|
WIFI_SO_WIFI_STATUS,
|
||
|
/* SOL_NETLINK */
|
||
|
WIFI_NETLINK_ADD_MEMBERSHIP,
|
||
|
WIFI_NETLINK_DROP_MEMBERSHIP,
|
||
|
WIFI_NETLINK_PKTINFO,
|
||
|
};
|
||
|
|
||
|
enum Poll_mask {
|
||
|
WIFI_POLLIN = 0x1,
|
||
|
WIFI_POLLOUT = 0x2,
|
||
|
WIFI_POLLEX = 0x4,
|
||
|
};
|
||
|
|
||
|
enum { MAX_POLL_SOCKETS = 16, };
|
||
|
|
||
|
typedef __SIZE_TYPE__ size_t;
|
||
|
typedef __PTRDIFF_TYPE__ ssize_t;
|
||
|
}
|
||
|
|
||
|
|
||
|
struct Wifi::Sockaddr { };
|
||
|
struct Wifi::Msghdr
|
||
|
{
|
||
|
enum { MAX_IOV_LEN = 8 };
|
||
|
|
||
|
struct Iov {
|
||
|
void *iov_base;
|
||
|
size_t iov_len;
|
||
|
};
|
||
|
|
||
|
void *msg_name;
|
||
|
unsigned msg_namelen;
|
||
|
Iov msg_iov[MAX_IOV_LEN];
|
||
|
unsigned msg_iovlen;
|
||
|
/* XXX recvmsg msg_flags ? */
|
||
|
void *msg_control;
|
||
|
unsigned msg_controllen;
|
||
|
};
|
||
|
|
||
|
struct Wifi::Socket_call
|
||
|
{
|
||
|
Socket* socket(int domain, int type, int protocol);
|
||
|
int close(Socket *);
|
||
|
|
||
|
int bind(Socket *, Sockaddr const *addr, unsigned addrlen);
|
||
|
int getsockname(Socket *, Sockaddr *addr, unsigned *addrlen);
|
||
|
int poll_all(Poll_socket_fd *, unsigned, int);
|
||
|
ssize_t recvmsg(Socket*, Msghdr *, Flags flags);
|
||
|
ssize_t sendmsg(Socket*, Msghdr const *, Flags flags);
|
||
|
int setsockopt(Socket*, Sockopt_level level, Sockopt_name optname,
|
||
|
void const *optval, unsigned optlen);
|
||
|
|
||
|
void non_block(Socket *, bool);
|
||
|
|
||
|
/**
|
||
|
* Special ioctl related functions
|
||
|
*/
|
||
|
void get_mac_address(unsigned char *addr);
|
||
|
};
|
||
|
|
||
|
struct Wifi::Poll_socket_fd
|
||
|
{
|
||
|
Socket *s;
|
||
|
void *pfd;
|
||
|
int events;
|
||
|
int revents;
|
||
|
};
|
||
|
|
||
|
#endif /* _WIFI__SOCKET_CALL_H_ */
|