[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference 7.286::fddi

Title:FDDI - The Next Generation
Moderator:NETCAD::STEFANI
Created:Thu Apr 27 1989
Last Modified:Thu Jun 05 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:2259
Total number of notes:8590

1665.0. "fddi/dli packet loss" by BUDDIE::KENWORTHY () Fri Apr 28 1995 19:28

I have a customer that is losing packets using a DLI socket. they have given me
a complete problem description so I will put it in here.

Not all data packets are being delivered to an application which is reading
FDDI multicast data from a DLI socket. The frequency of missing data packets
increases with the load places on the recieving workstation.

The customer generates telemetry messages composed of multiple multicast
packets at a once per second rate on an FDDI network. The recieving 
application assembles these multiple packets into a single telemetry 
message for processing. Each multicast packet contains a header specifying 
the message id, the total number of packets in the message and a packet
sequence number for this segment.

Below is an example of how the customer opens and closes the DLI socket:

/* Open Data Link Socket */
sd = socket( AF_DLI, SOCK_DGRAM, DLPROTO_DLI);

/* Set up Data Link address for Binding */
addr->dli_family = AF_DLI;
addr->dli_substructype = DLI_802;
addr->choose_addr_dli_devnumber = 0;
addr->choose_addr.dli_802addr.ioctl = DLI_DEFAULT;
addr->choose_addr_dli_802addr_svc = TYPE1;
addr->choose_addr_dli_802addr.eh_802.ctl.U_fmt = UI_NPCMD;
addr->choose_addr_dli_802addr.eh_802.ssap = source_sap;

/* Bind to the source address */
bind(sd, (struct sockaddr *)addr, sizeof(struct sockaddr_dl));

/*Enable reciept of the specified multicast address */
setsockopt(sd, DLPROTO_DLI, DLI_MULTICAST, multicast_add);

/* Loop to read all packets of a multicast message */
while( segments_to_be_read > 0)
	bytes_read = recvfrom(sd, recv_buf, bufsize, NULL, &from_addr,
			sizeof(from_addr));
	/* Copy data to user's buffer */
}

Test Scenario

A 3000/500 was set up using a simple test tool to recieve the telemetry 
packets from the network. This tool prints a list of recieved packet numbers
when an error is detected. A FDDI LAN analyzer was connected to the FDDI 
network to monitor the telemetry packets.

Periodacally, the test tool would report a missing packet, but the LAN 
analyzer would show that the packet was on the network. It was noticed that as
the average CPU utilization went up, the frequency of missing packets
increased. If the mouse was used to drive the CPU 0% idle, packets would be
missing from almost every telemetry message. Missing packets also occur more
frequently on a 3000/300.
    
    The customer is running DEC OSF/1 v2.0 plus patches, the FDDI module is
    a dual attached DEFTA

Any help or suggestions would be great. I am also posting this in the
    DIGITAL_UNIX notes file.

regards
jimk
                            
T.RTitleUserPersonal
Name
DateLines
1665.1NETRIX::thomasThe Code WarriorMon May 01 1995 10:061
Use SO_RCVBUF to increase the amount of space used to store receive buffers.
1665.2set to 64kBUDDIE::KENWORTHYMon May 01 1995 18:277
    I talked to the customer and they had in fact set the SO_RCVBUF and the
    SO_SNDBUF to 64k for the setsockopt system call.
    
    Thanks for the quick response. Any other ideas?
    
    regards
    jimk