Can't communicate between lan ports on openwrt router

I've got a WBMR-HP-G300H Buffalo Airstation router on which I've installed the lates OpenWRT software.

All is working well (ADSL, WIFI etc) except for one niggle. I can't communicate between lan ports. i.e. if I have one computer connected on lan port 1 and I try to ping another computer on lan port 2 then I get "destination unreachable".

I can ping both computers from the router itself and can also ping each computer from a seperate laptop connected wirelessly. All computers are in the same subnet range (10.0.0.?/24).

I suspect that I may need to configure a vlan on the switch but everytime I try and do this with various google'ed configuration I keep freezing out all lan-ports and I have to revert back using a wirelessly connected laptop.

Here's my /etc/config/network:

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'lan'
        option type 'bridge'
        option proto 'static'
        option netmask '255.255.255.0'
        option ipaddr '10.0.0.1'
        option _orig_ifname 'eth0 wlan0'
        option _orig_bridge 'true'
        option ifname 'eth0'

config adsl-device 'adsl'
        option fwannex 'a'
        option annex 'a2p'

config interface 'wan'
        option _orig_ifname 'nas0'
        option _orig_bridge 'false'
        option proto 'pppoa'
        option encaps 'vc'
        option atmdev '0'
        option vci '38'
        option vpi '0'
        option username '?????????????'
        option password '??????????????'

Any help would be warmly received.

Here's some more config stuff.

root@OpenWrt:~# ifconfig -a
br-lan    Link encap:Ethernet  HWaddr 00:24:A5:BD:66:08  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:226576 errors:0 dropped:346 overruns:0 frame:0
          TX packets:269292 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:26771676 (25.5 MiB)  TX bytes:183986450 (175.4 MiB)

eth0      Link encap:Ethernet  HWaddr 00:24:A5:BD:66:08  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ifb0      Link encap:Ethernet  HWaddr 36:60:EC:DF:13:A1  
          BROADCAST NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ifb1      Link encap:Ethernet  HWaddr 4A:7B:75:67:54:E0  
          BROADCAST NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:780 errors:0 dropped:0 overruns:0 frame:0
          TX packets:780 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:58369 (57.0 KiB)  TX bytes:58369 (57.0 KiB)

mon.wlan0 Link encap:UNSPEC  HWaddr 00-24-A5-BD-66-08-00-48-00-00-00-00-00-00-00-00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2424 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32 
          RX bytes:320188 (312.6 KiB)  TX bytes:0 (0.0 B)

pppoa-wan Link encap:Point-to-Point Protocol  
          inet addr:81.136.179.204  P-t-P:81.134.80.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:258894 errors:0 dropped:0 overruns:0 frame:0
          TX packets:212976 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:177341656 (169.1 MiB)  TX bytes:25192459 (24.0 MiB)

wlan0     Link encap:Ethernet  HWaddr 00:24:A5:BD:66:08  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:204063 errors:0 dropped:0 overruns:0 frame:0
          TX packets:245516 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32 
          RX bytes:26613140 (25.3 MiB)  TX bytes:162799765 (155.2 MiB)

root@OpenWrt:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br-lan          8000.0024a5bd6608       no              wlan0
                                                        eth0
root@OpenWrt:~# swconfig dev eth0 show
Global attributes:
        enable_vlan: 0
Port 0:
        pvid: 0
        link: port:0 link:up speed:1000baseT full-duplex txflow rxflow 
Port 1:
        pvid: 0
        link: port:1 link:down
Port 2:
        pvid: 0
        link: port:2 link:down
Port 3:
        pvid: 0
        link: port:3 link:down
Port 4:
        pvid: 0
        link: port:4 link:up speed:100baseT full-duplex txflow rxflow auto
Port 5:
        pvid: 0
        link: port:5 link:up speed:100baseT full-duplex txflow rxflow auto

Regards Mark.


Solution 1:

This is copied from the OpenWRT Page concerning your router:

Wired stations cannot ping each other

This is a known bug: "switch eth0(Atheros AR8316) no traffic between ports possible" Based on the comments from the bug you can try these commands:

swconfig dev eth0 vlan 1 set ports "0 1 2 3 4 5"
swconfig dev eth0 set apply

If these work you can add the following lines to your /etc/config/network:

config switch
  option name 'eth0'
  option reset    '1'


config switch_vlan
  option vlan '1'
  option device   'eth0'
  option ports    '0 1 2 3 4 5'

Solution 2:

You should check if all the lan ports are seen as a single eth0 interface or if they are using separate interfaces.

root@router:~# ifconfig | grep encap
wlan0     Link encap:Ethernet  HWaddr 00:18:84:1A:58:29  
lan       Link encap:Ethernet  HWaddr 00:18:84:1A:58:30  
eth0      Link encap:Ethernet  HWaddr 00:18:84:1A:58:30
eth1      Link encap:Ethernet  HWaddr 00:18:84:1A:58:31
eth2      Link encap:Ethernet  HWaddr 00:18:84:1A:58:32
eth3      Link encap:Ethernet  HWaddr 00:18:84:1A:58:33
lo        Link encap:Local Loopback  

If they are indeed separate interfaces, add them in the lan bridge:

root@router:~# brctl show
bridge name bridge id               STP enabled     interfaces
lan         8000.0018841a6830       no              eth0
                                    wlan0

root@router:~# brctl addif lan eth1
root@router:~# brctl addif lan eth2
root@router:~# brctl addif lan eth3

I tried this on dd-wrt though, so ymmv. Reference here.

Solution 3:

I notice that one of the ports is connected at 1000Mbps and the others are connected at 100Mbps. Can you verify that this connectivity problem exists between two computers connected at the same speed?

I'm thinking that there might be a problem with the built-in switch handling cross-speed connections that would be hidden when dealing with a separate interface that goes through the kernel.

Solution 4:

Looks like the switch config wasn't set by default to allow communication between ports

I needed to execute the following.

$ swconfig dev eth0 vlan 1 set ports "0 1 2 3 4 5"
$ swconfig dev eth0 set apply