xna - The DEMNA Ethernet interfaces
config_driver xna
The xna driver provides access to a 10-MB Ethernet network
through the DEMNA adapter. The DEMNA is an Ethernet-toXMI
adapter.
The host's Internet address is specified at boot time with
an SIOCSIFADDR ioctl. The xna driver employs the Address
Resolution Protocol, as 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 adapter and SIOCRPHYSADDR can be used to
read its physical address. SIOCADDMULTI and SIOCDELMULTI
can be used to add or delete multicast addresses. The xna
driver supports a maximum of 12 multicast addresses. The
argument to the latter ioctls is a pointer to an ``ifreq''
structure found in <net/if.h>.
SIOCRDCTRS and SIOCRDZCTRS ioctls can be used to read or
read and clear network counters. The argument to the latter
two ioctls is a pointer to a counter structure ``ctrreq''
found in <net/if.h>.
The ioctls SIOCENABLBACK and SIOCDISABLBACK can be used to
enable and disable the interface loopback mode.
The PUP protocol family is not supported.
The DEMNA errors are coded as follows: Adapter did not
pass the power-up self-test during autoconfiguration time.
The port attachment fails. The xna driver was unable to
allocate memory for adapter data structures. The port
attachment fails. The xna driver was unable to map memory
for adapter data structures. The port attachment fails.
The xna driver was unable to bring the adapter into the
initialized state. The port attachment fails. The xna
driver failed to prepare the adapter for run-time use.
The xna driver was unable to bring the adapter into the
initialized state during a port reset. The adapter port
command failed. The error code gives reason for failure.
Too many multicast requests have been made.
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;
static struct ifdevea devea;
/* Get a socket */
s = socket(AF_INET,SOCK_DGRAM,0);
if (s < 0) {
perror("socket");
exit(1);
}
strcpy(devea.ifr_name,"xna0");
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_name,"xna0");
if (ioctl(s,SIOCENABLEBACK,&data) < 0) {
perror("SIOCENABLEBACK:");
exit(1);
}
close(s); }
Files: arp(7), inet(7), intro(4), netstat(1)
xna(7)
[ Back ] |