xna(7)xna(7)NAMExna - The DEMNA Ethernet interfaces
SYNOPSIS
config_driver xnaDESCRIPTION
The xna driver provides access to a 10-MB Ethernet network through the
DEMNA adapter. The DEMNA is an Ethernet-to-XMI adapter.
The host's Internet address is specified at boot time with an SIOCSI‐
FADDR ioctl. The xna driver employs the Address Resolution Protocol,
as described in arp(7), to map dynamically between Internet and Ether‐
net 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'' struc‐
ture 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.
RESTRICTIONS
The PUP protocol family is not supported.
ERRORS
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 struc‐
tures. 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.
EXAMPLES
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 defini‐
tions */ #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 defini‐
tions */ #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); }
SEE ALSO
Files: arp(7), inet(7), intro(4), netstat(1)xna(7)