Subject: FDDI: PC/BIOS and MTU
To: None <>
From: Hal Murray <>
List: current-users
Date: 05/30/1999 17:11:34
Is anybody using DEFPAs on PCs? 

They work on Alphas. 

When I tried them on Compaq Deskpros, nothing good happened.  I finally 
tracked it down to the PCI_COMMAND_MASTER_ENABLE bit not being set 
in the main CSR.  That's the DMA enable flag.  As you can probably 
guess, nothing good happens when that's not turned on. 

I don't know much about PCs.  Who is supposed to turn that bit on?  
Is this just a glitch in this BIOS or will most PCs have the same 
problem?  The PCI section of the F10@powerup setup code recognizes 
the card enough to say "FDDI". 

I added a couple of lines of code to turn it on.  It's working now. 

I've noticed another quirk with FDDI. 

FDDI is different from most other network technologies in that the 
hardware MTU and the MTU adopted by the IETF for IP packets don't 
mesh cleanly.  RFC 1390 covers this.  The IETF rounded down a bit, 
leaving some extra room. 

Is the value in ifp->if_mtu supposed to represent the hardware limit 
or the IP limit? 

The current code initializes things to 4470.  That works fine as 
long as you are talking to another box that does the same thing.  
It can be easily fixed by adding "mtu 4352" to the ifconfig command. 
(I've been adding it to /etc/ifconfig.fpa0.) 

The code says:

In .../net/if_fddi.h
    #define FDDIIPMTU               4352
    #define FDDIMTU                 4470

In .../net/if_fddisubr.c
            ifp->if_mtu = FDDIMTU;

I suggest that be changed to FDDIIPMTU.  That's a step in the right 
direction for being squeeky clean and/or maybe helping interoperability. 

TCP should do the right thing and select the smallest value when 
it opens the connection.

I was worried that UDP wouldn't work with mixed MTUs, but I just 
tried it (in both directions) between two machines using different 
MTUs.  It worked.  I assume the input side sets up the hardware to 
take the max hardware size and then doesn't complain when it receives 
something bigger than it would transmit.