[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
extending devprobe for netdde
From: |
Samuel Thibault |
Subject: |
extending devprobe for netdde |
Date: |
Sat, 5 May 2012 14:27:09 +0200 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Hello,
There's currently no way to know whether netdde found a network device,
because devprobe only works with mach devices. It should however not be
hard to extend it to work with netdde: it should be a matter of doing in
devprobe something like commit d3ad9490749fe330bea91c0027a0c8319476cac0
in pfinet, see below.
Could someone have a look?
Samuel
commit d3ad9490749fe330bea91c0027a0c8319476cac0
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Sun Feb 19 05:32:36 2012 +0100
Make pfinet try both a filepath and kernel device
pfinet/ethernet.c (ethernet_open): Try to file_name_lookup() the device as
filepath before opening the Mach device.
diff --git a/pfinet/ethernet.c b/pfinet/ethernet.c
index dab5c56..f366919 100644
--- a/pfinet/ethernet.c
+++ b/pfinet/ethernet.c
@@ -166,14 +166,33 @@ ethernet_open (struct device *dev)
mach_port_set_qlimit (mach_task_self (), edev->readptname,
MACH_PORT_QLIMIT_MAX);
- err = get_privileged_ports (0, &master_device);
- if (err)
- error (2, err, "cannot get device master port");
-
- err = device_open (master_device, D_WRITE | D_READ, dev->name,
&edev->ether_port);
- mach_port_deallocate (mach_task_self (), master_device);
- if (err)
- error (2, err, "%s", dev->name);
+ master_device = file_name_lookup (dev->name, O_READ | O_WRITE, 0);
+ if (master_device != MACH_PORT_NULL)
+ {
+ /* The device name here is the path of a device file. */
+ err = device_open (master_device, D_WRITE | D_READ, "eth",
&edev->ether_port);
+ mach_port_deallocate (mach_task_self (), master_device);
+ if (err)
+ error (2, err, "%s", dev->name);
+ }
+ else
+ {
+ /* No, perhaps a Mach device? */
+ int file_errno = errno;
+ err = get_privileged_ports (0, &master_device);
+ if (err)
+ {
+ error (0, errno, "file_name_lookup %s", dev->name);
+ error (2, err, "and cannot get device master port");
+ }
+ err = device_open (master_device, D_WRITE | D_READ, dev->name,
&edev->ether_port);
+ mach_port_deallocate (mach_task_self (), master_device);
+ if (err)
+ {
+ error (0, errno, "file_name_lookup %s", dev->name);
+ error (2, err, "%s", dev->name);
+ }
+ }
err = device_set_filter (edev->ether_port, ports_get_right (edev->readpt),
MACH_MSG_TYPE_MAKE_SEND, 0,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- extending devprobe for netdde,
Samuel Thibault <=