#ifndef NET_KEXT_NET_H
#define NET_KEXT_NET_H
#include <sys/appleapiopts.h>
#include <sys/queue.h>
#include <sys/cdefs.h>
#ifdef BSD_KERNEL_PRIVATE
#include <sys/kpi_socketfilter.h>
struct socket_filter;
#define SFEF_DETACHING 0x1
struct socket_filter_entry {
struct socket_filter_entry *sfe_next_onsocket;
struct socket_filter_entry *sfe_next_onfilter;
struct socket_filter *sfe_filter;
struct socket *sfe_socket;
void *sfe_cookie;
u_int32_t sfe_flags;
};
#define SFF_DETACHING 0x1
struct socket_filter {
TAILQ_ENTRY(socket_filter) sf_protosw_next;
TAILQ_ENTRY(socket_filter) sf_global_next;
struct socket_filter_entry *sf_entry_head;
struct protosw *sf_proto;
struct sflt_filter sf_filter;
u_int32_t sf_flags;
u_int32_t sf_usecount;
};
TAILQ_HEAD(socket_filter_list, socket_filter);
void sflt_init(void);
void sflt_initsock(struct socket *so);
void sflt_termsock(struct socket *so);
void sflt_use(struct socket *so);
void sflt_unuse(struct socket *so);
void sflt_notify(struct socket *so, sflt_event_t event, void *param);
int sflt_data_in(struct socket *so, const struct sockaddr *from, mbuf_t *data,
mbuf_t *control, sflt_data_flag_t flags);
int sflt_attach_private(struct socket *so, struct socket_filter *filter, sflt_handle handle, int locked);
void sflt_detach_private(struct socket_filter_entry *entry, int filter_detached);
#endif
#define NFF_BEFORE 0x01
#define NFF_AFTER 0x02
#define NKE_OK 0
#define NKE_REMOVE -1
#if __DARWIN_ALIGN_POWER
#pragma options align=power
#endif
struct so_nke
{ unsigned int nke_handle;
unsigned int nke_where;
int nke_flags;
unsigned long reserved[4];
};
#if __DARWIN_ALIGN_POWER
#pragma options align=reset
#endif
#endif