summaryrefslogtreecommitdiff
path: root/device/net_io.h
diff options
context:
space:
mode:
Diffstat (limited to 'device/net_io.h')
-rw-r--r--device/net_io.h70
1 files changed, 68 insertions, 2 deletions
diff --git a/device/net_io.h b/device/net_io.h
index 073bdca7..d4e24d41 100644
--- a/device/net_io.h
+++ b/device/net_io.h
@@ -38,7 +38,7 @@
#include <mach/machine/vm_types.h>
#include <ipc/ipc_kmsg.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/lock.h>
#include <kern/kalloc.h>
@@ -46,6 +46,15 @@
#include <device/io_req.h>
#include <device/net_status.h>
+struct net_rcv_port;
+typedef struct net_rcv_port *net_rcv_port_t;
+
+struct net_hash_entry;
+typedef struct net_hash_entry *net_hash_entry_t;
+
+struct net_hash_header;
+typedef struct net_hash_header *net_hash_header_t;
+
/*
* A network packet is wrapped in a kernel message while in
* the kernel.
@@ -65,7 +74,7 @@ extern void net_kmsg_put(ipc_kmsg_t);
* Network utility routines.
*/
-extern void net_ast();
+extern void net_ast(void);
extern void net_packet(struct ifnet *, ipc_kmsg_t, unsigned int, boolean_t);
extern void net_filter(ipc_kmsg_t, ipc_kmsg_queue_t);
extern io_return_t net_getstat(struct ifnet *, dev_flavor_t, dev_status_t,
@@ -80,7 +89,64 @@ extern vm_size_t net_kmsg_size;
extern void net_kmsg_collect (void);
+extern void net_io_init(void);
+extern void net_thread(void) __attribute__ ((noreturn));
+
#define net_kmsg_alloc() ((ipc_kmsg_t) kalloc(net_kmsg_size))
#define net_kmsg_free(kmsg) kfree((vm_offset_t) (kmsg), net_kmsg_size)
+extern unsigned int ntohl(unsigned int);
+extern unsigned short int ntohs(unsigned short int);
+extern unsigned int htonl(unsigned int);
+extern unsigned short int htons(unsigned short int);
+
+unsigned int bpf_hash(int n, const unsigned int *keys);
+
+extern boolean_t
+net_do_filter(
+ net_rcv_port_t infp,
+ const char * data,
+ unsigned int data_count,
+ const char * header); /* CSPF */
+
+extern int
+bpf_do_filter(
+ net_rcv_port_t infp,
+ char * p,
+ unsigned int wirelen,
+ char * header,
+ unsigned int hlen,
+ net_hash_entry_t **hash_headpp,
+ net_hash_entry_t *entpp); /* BPF */
+
+int hash_ent_remove(
+ struct ifnet *ifp,
+ net_hash_header_t hp,
+ int used,
+ net_hash_entry_t *head,
+ net_hash_entry_t entp,
+ queue_entry_t *dead_p);
+
+void net_free_dead_infp(queue_entry_t dead_infp);
+void net_free_dead_entp (queue_entry_t dead_entp);
+
+int bpf_validate(
+ bpf_insn_t f,
+ int bytes,
+ bpf_insn_t *match);
+
+int bpf_eq(
+ bpf_insn_t f1,
+ bpf_insn_t f2,
+ int bytes);
+
+int net_add_q_info(ipc_port_t rcv_port);
+
+int bpf_match (
+ net_hash_header_t hash,
+ int n_keys,
+ const unsigned int *keys,
+ net_hash_entry_t **hash_headpp,
+ net_hash_entry_t *entpp);
+
#endif /* _DEVICE_NET_IO_H_ */