summaryrefslogtreecommitdiff
path: root/eth-multiplexer/bpf_impl.h
diff options
context:
space:
mode:
authorZheng Da <zhengda1936@gmail.com>2010-07-31 07:33:10 +0200
committerZheng Da <zhengda1936@gmail.com>2010-07-31 07:33:10 +0200
commit4f7cf90e6c8446f28c621bc9134438e41403e297 (patch)
tree35cbaa83380e123224e12d13de7fc7eae078b090 /eth-multiplexer/bpf_impl.h
parent984ad35cf434936fdf6ca11e685324bc8edf62cc (diff)
Use libbpf in eth-multiplxer.
Diffstat (limited to 'eth-multiplexer/bpf_impl.h')
-rw-r--r--eth-multiplexer/bpf_impl.h156
1 files changed, 0 insertions, 156 deletions
diff --git a/eth-multiplexer/bpf_impl.h b/eth-multiplexer/bpf_impl.h
deleted file mode 100644
index 82db1b8d..00000000
--- a/eth-multiplexer/bpf_impl.h
+++ /dev/null
@@ -1,156 +0,0 @@
- /*
- * Mach Operating System
- * Copyright (c) 1993-1989 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * Author: David B. Golub, Carnegie Mellon University
- * Date: 3/98
- *
- * Network IO.
- *
- * Packet filter code taken from vaxif/enet.c written
- * CMU and Stanford.
- */
-
-/* the code copied from device/net_io.c in Mach */
-
-#ifndef BPF_IMPL_H
-#define BPF_IMPL_H
-
-#include <device/bpf.h>
-
-#include "queue.h"
-#include "vdev.h"
-
-typedef unsigned short filter_t;
-typedef filter_t *filter_array_t;
-
-#define NET_MAX_FILTER 128 /* was 64, bpf programs are big */
-
-#define NET_HASH_SIZE 256
-#define N_NET_HASH 4
-#define N_NET_HASH_KEYS 4
-
-#ifndef BPF_ALIGN
-#define EXTRACT_SHORT(p) ((u_short)ntohs(*(u_short *)p))
-#define EXTRACT_LONG(p) (ntohl(*(u_long *)p))
-#else
-#define EXTRACT_SHORT(p)\
- ((u_short)\
- ((u_short)*((u_char *)p+0)<<8|\
- (u_short)*((u_char *)p+1)<<0))
-#define EXTRACT_LONG(p)\
- ((u_long)*((u_char *)p+0)<<24|\
- (u_long)*((u_char *)p+1)<<16|\
- (u_long)*((u_char *)p+2)<<8|\
- (u_long)*((u_char *)p+3)<<0)
-#endif
-
-#define HASH_ITERATE(head, elt) (elt) = (net_hash_entry_t) (head); do {
-#define HASH_ITERATE_END(head, elt) \
- (elt) = (net_hash_entry_t) queue_next((queue_entry_t) (elt)); \
-} while ((elt) != (head));
-
-#define FILTER_ITERATE(if_port_list, fp, nextfp, chain) \
- for ((fp) = (net_rcv_port_t) queue_first(if_port_list); \
- !queue_end(if_port_list, (queue_entry_t)(fp)); \
- (fp) = (nextfp)) { \
- (nextfp) = (net_rcv_port_t) queue_next(chain);
-#define FILTER_ITERATE_END }
-
-/* entry_p must be net_rcv_port_t or net_hash_entry_t */
-#define ENQUEUE_DEAD(dead, entry_p, chain) { \
- queue_next(&(entry_p)->chain) = (queue_entry_t) (dead); \
- (dead) = (queue_entry_t)(entry_p); \
-}
-
-#define CSPF_BYTES(n) ((n) * sizeof (filter_t))
-
-/*
- * Receive port for net, with packet filter.
- * This data structure by itself represents a packet
- * filter for a single session.
- */
-struct net_rcv_port {
- queue_chain_t input; /* list of input open_descriptors */
- queue_chain_t output; /* list of output open_descriptors */
- mach_port_t rcv_port; /* port to send packet to */
- int rcv_count; /* number of packets received */
- int priority; /* priority for filter */
- filter_t *filter_end; /* pointer to end of filter */
- filter_t filter[NET_MAX_FILTER];
- /* filter operations */
-};
-typedef struct net_rcv_port *net_rcv_port_t;
-
-/*
- * A single hash entry.
- */
-struct net_hash_entry {
- queue_chain_t chain; /* list of entries with same hval */
-#define he_next chain.next
-#define he_prev chain.prev
- mach_port_t rcv_port; /* destination port */
- unsigned int keys[N_NET_HASH_KEYS];
-};
-typedef struct net_hash_entry *net_hash_entry_t;
-
-/*
- * This structure represents a packet filter with multiple sessions.
- *
- * For example, all application level TCP sessions might be
- * represented by one of these structures. It looks like a
- * net_rcv_port struct so that both types can live on the
- * same packet filter queues.
- */
-struct net_hash_header {
- struct net_rcv_port rcv;
- int n_keys; /* zero if not used */
- int ref_count; /* reference count */
- net_hash_entry_t table[NET_HASH_SIZE];
-} filter_hash_header[N_NET_HASH];
-
-typedef struct net_hash_header *net_hash_header_t;
-
-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);
-io_return_t net_set_filter(struct vether_device *ifp, mach_port_t rcv_port,
- int priority, filter_t *filter, unsigned int filter_count);
-
-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);
-unsigned int bpf_hash (int n, unsigned int *keys);
-int bpf_match (net_hash_header_t hash, int n_keys, unsigned int *keys,
- net_hash_entry_t **hash_headpp, net_hash_entry_t *entpp);
-
-int hash_ent_remove (struct vether_device *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);
-void remove_dead_filter (struct vether_device *ifp,
- queue_head_t *if_port_list, mach_port_t dead_port);
-void destroy_filters (struct vether_device *ifp);
-
-#endif /* _DEVICE_BPF_H_ */