I am trying to port a network-access daemon from Ultrix to DU
(currently V3.2A). It uses DLI datagram sockets for receiving
multicast packets in a proprietary format.
For reasons of efficiency, I need to be able to not only ENABLE
multicast addresses, but to subsequently DISABLE them.
Under Ultrix, this was done using this code:
typedef struct {
int id;
struct sockaddr_dl info;
} socket_info;
int delete_multicast(socket_info *sock,unsigned char *addr)
{
struct ifreq ifr;
ifr.ifr_ifru.ifru_addr.sa_family = AF_DLI;
sprintf(ifr.ifr_name,"%s%d",sock->info.dli_device.dli_devname,
sock->info.dli_device.dli_devnumber);
bcopy(addr,ifr.ifr_ifru.ifru_addr.sa_data,DLI_EADDRSIZE);
return(ioctl(sock->id,SIOCDELMULTI,&ifr));
}
This compiles and runs without errors on DU 3.2A, but tests show that
multicasts sent to the "deleted" address are still received.
A quick perusal of the Network Programmer's guide leads me to believe
that I might be able to reproduce the current functionality using the
DLPI interface, but the potential effort involved makes this
undesirable.
Questions for everyone (esp. DEC people):
Is this a known problem ?
Is there a work-around, or is it fixed in a later version of DU ?
Can I really do this with DLPI ?
----
Brian McAllister Internet: mcallister_at_mit.edu
Bates LINAC (MIT), Middleton, Ma (617) 253-9537
Received on Fri Mar 01 1996 - 05:56:45 NZDT