Changing MTU to get through PPPoE gateway?


Does anyone know how to change the MTU for the ethernet interface in OSX (not for PPPoE)? ifconfig won't do it.

My OSX box is behind a PPPoE/DSL router. Many web pages & other tcp apps fail because the responses are full 1500 byte packets, and they don't fit into PPPoE packets (*see below for more details).

This is a problem on many OS's (OS 9, NT, etc), and the fix is to change the MTU (max transmit unit) for your ethernet card to 1450. This causes your tcp stack to tell destinations you connect to not to send packets bigger than 1450, which is small enough to fit into PPPoE packets.

Does anyone know how to do this on OSX? Under other varieties of bsd, the command is simply "ifconfig en0 mtu 1450." But Apples seems to have removed the "mtu" option from Darwin's ifconfig - it doesn't show up in the man pager, and ifconfig simply ignores it.

* more details for those interested:

Ethernet has a maximum frame size of approx 1500 bytes. When your machine connects via tcp to another, it tells the destination what the largest packet it should send back is. Sometimes there are intermediate networks that have smaller limits that ethernet. When a packet that is too big tries to go through one, it gets fragmented. Many OS's set the "don't fragment" option for performance reasons. If DF is set, the router w/ the link too small for the packet discards the packet. The IP specification says that a router discarding such a packet for this reason is supposed to send back a message to that effect to the sending host, letting it know to send smaller packets.

PPPoE takes up some space, so full ethernet packets don't fit in PPPoE, manifesting the above problem. Unfortunately, for unknown reasons, many ISP DSL networks don't send back the required error message. Thus, the sending server never knows it's packets can't get to you. It tries a couple more times, then gives up. We call the ISP's routers "black hole routers" - packets go in, but nothing comes out.