le - LeMAC Ethernet interface
config_driver le
The le interface provides access to a 10 Mb/s Ethernet
network through the LeMAC controller.
The host's Internet address is specified at boot time with
an SIOCSIFADDR ioctl. The le interface employs the address
resolution protocol described in arp(7) to map dynamically
between Internet and Ethernet addresses on the local network.
The SIOCSPHYSADDR ioctl can be used to change the physical
address of the LeMAC. The SIOCRPHYSADDR ioctl can be used
to read the physical address of the LeMAC.
The SIOCADDMULTI and SIOCDELMULTI ioctls can be used to
add or delete multicast addresses. The LeMAC recognizes a
maximum of 12 multicast addresses.
The SIOCRDCTRS and SIOCRDZCTRS ioctls can be used to read
or ``read and clear'' the Ethernet driver counters. The
argument to these two ioctls is a pointer to a counter
structure, ctrreq, found in <net/if.h>.
The SIOCENABLBACK and SIOCDISABLBACK ioctls can be used to
enable and disable the interface loopback mode respectively.
The diagnostic error messages contain relevant information
provided by the LeMAC. The interface was handed a message
with addresses formatted in an unsuitable address family,
and the packet was dropped. The le driver was unable to
allocate memory for internal data structures. The IRQ for
the LeMAC is missing from the CMOS configuration data or
is incorrect. The IRQ for the LeMAC is missing from the
CMOS configuration data or is incorrect. Too many multicast
requests have been made. The shared memory block for
the LeMAC's local RAM buffer is missing from the CMOS configuration
data. The station address PROM on the LeMAC is
corrupt or inaccessible. The hardware transmit queue has
been overflowed. An attempt was made to delete the Ethernet
broadcast address of ff-ff-ff-ff-ff.
To obtain the physical address of the adapter, use the
SIOCRPHYSADDR ioctl as in the following program example:
#include <stdio.h> /* standard I/O */
#include <errno.h> /* error numbers */
#include <sys/socket.h> /* socket definitions */
#include <sys/ioctl.h> /* ioctls */ #include
<net/if.h> /* generic interface structures */
main() {
int s,i;
struct ifdevea devea;
/* Get a socket */
s = socket(AF_INET,SOCK_DGRAM,0);
if (s < 0) {
perror("socket");
exit(1);
}
strcpy(devea.ifr_name,"le0");
if (ioctl(s,SIOCRPHYSADDR,&devea) < 0) {
perror(&devea.ifr_name[0]);
exit(1);
}
printf("Address is ");
for (i = 0; i < 6; i++)
printf("%X ", devea.default_pa[i] & 0xff);
printf("\n");
close(s); }
To enable external loopback, use the SIOCENABLEBACK ioctl
as in the following program example:
#include <stdio.h> /* standard I/O */
#include <errno.h> /* error numbers */
#include <sys/socket.h> /* socket definitions */
#include <sys/ioctl.h> /* ioctls */ #include
<net/if.h> /* generic interface structures */
main() {
int s;
struct ifreq data;
/* Get a socket */
s = socket(AF_INET,SOCK_DGRAM,0);
if (s < 0) {
perror("socket");
exit(1);
}
strcpy(data.ifr,"le0");
if (ioctl(s,SIOCENABLEBACK,&data) < 0) {
perror("SIOCENABLEBACK:");
exit(1);
}
close(s); }
arp(7), inet(7), netintro(7)
le(7)
[ Back ] |