summaryrefslogtreecommitdiff
path: root/pfinet/ethernet.c
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1995-09-12 16:02:43 +0000
committerMichael I. Bushnell <mib@gnu.org>1995-09-12 16:02:43 +0000
commit6e094620a0a9d1a3a12ace6564076b6d15a59ecc (patch)
tree4d01258c8804ed699bf2669d6f7e30017aae8b1b /pfinet/ethernet.c
parentff172315ec147f043d88ecc365bb63044088b201 (diff)
Formerly ethernet.c.~4~
Diffstat (limited to 'pfinet/ethernet.c')
-rw-r--r--pfinet/ethernet.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/pfinet/ethernet.c b/pfinet/ethernet.c
index c43cd37b..0386be9e 100644
--- a/pfinet/ethernet.c
+++ b/pfinet/ethernet.c
@@ -18,10 +18,43 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
+#include <device/device.h>
+#include <device/net_status.h>
device_t ether_port;
struct device *ether_dev;
+struct port_info *readpt;
+mach_port_t readptname;
+
+int
+ethernet_demuxer (struct mach_msg_header_t *inp,
+ struct mach_msg_header_t *outp)
+{
+ struct net_rcv_msg *msg = (struct net_rcv_msg *) inp;
+ struct packet_header *pkthdr = (struct packet_header *) msg->header;
+
+ if (inp->msgh_id != 2999)
+ return 0;
+
+ if (inp->msgh_local_port != readptname)
+ {
+ if (inp->msgh_remote_port != MACH_PORT_NULL)
+ mach_port_deallocate (mach_task_self (), inp->msgh_remote_port);
+ return 1;
+ }
+
+ if (ntohs (pkthdr->type) != HDR_ETHERNET)
+ return 1;
+
+ mutex_lock (&global_lock);
+ skb = alloc_skb (msg->net_rcv_msg_packet_count, GFP_ATOMIC);
+ skb->len = msg->net_rcv_msg_packet_count;
+
+
+
+
+
error_t
device_read_reply_inband (mach_port_t replypt,
error_t error_code,
@@ -45,3 +78,5 @@ start_ethernet (void)
{
device_read_request (ether_port, ether_reply, 0, 0, vm_page_size);
}
+
+