Topic: [HOWTO] limit the switch to use only 10BASE-T / disable 100BASE-TX

You may have your own reasons why you want to limit your switch to use only 10BASE-T.
The reason why I prefer 10BASE-T is the wiring in the house I live.
These telephone cables have no twisted pairs, they are more than 20m long and replacing them is not an option.
100BASE-TX may work on these cables, but I want to be on the safe side using 10 MHz instead of 100 MHz.
I own a D-Link DIR-300 and I will show you step by step what I have done to disable 100BASE-TX on the 4 ports of the switch.
I am using the method to disable Auto-Negotiation  Advertisement.

1. Determine the chip used for the switch.

# swconfig dev eth0 show
Global attributes:
        enable_vlan: 1
        name: IP175C

The DIR-300 has the IP175C.

2. Find and read the datasheet of your chip.

On page 63 the "Auto-Negotiation Advertisement register" is explained.
It is "MII register 4 of PHY0-4".
Bit 7 controls "100BASE-TX" Advertisement on/off (1/0).
Bit 8 controls "100BASE-TX full duplex" Advertisement on/off (1/0).

3. Read and write register 4 of port 0.

# swconfig dev eth0 set phy 0
# swconfig dev eth0 set reg 4
# swconfig dev eth0 get val

If you clear bit 7 and 8 you will get 1121.

# swconfig dev eth0 set val 1121

When you now plug in a cable on port 0 you should get a connection limited to 10BASE-T only.
You can check this on your PC with "ethtool".

4. Restart Auto-Negotiation

There is no need to unplug your cables everytime you change the Auto-Negotiation Advertisement.
On page 59 of the datasheet the "Restart Auto-Negotiation" bit is listed.
It is "MII register 0 of PHY0-4" bit 9.
This is similar to step 3.

5. Automate

For automation you may need a one-liner to set and clear the bits.

Here is the initscript I use:

I want to thank all developers of OpenWrt!