KSZ8995MA 사용법

@SRCHACK 씨에게서 받고 코드를 쓴 KSZ8995MA의 etherswitch 사용법의 메모입니다.

VLAN 설정



port4를 CPU 포트로 설정하고 port0과 VLAN을 결합해보십시오.
# etherswitchcfg config vlan_mode DOT1Q
# etherswitchcfg port0 pvid 2
# etherswitchcfg port0 striptag
# etherswitchcfg port4 pvid 2
# etherswitchcfg port4 addtag
# etherswitchcfg vlangroup2 vlan 2
# etherswitchcfg vlangroup2 members 0,4
# ifconfig vlan2 create vlan 2 vlandev arge0
# ifconfig vlan2 inet 10.10.10.111/24

vlangroup은 어느 것이든 좋습니다.

통상의 Switch의 경우와 Dot1Q+VLAN에서의 ping의 ping 100회의 응답 속도를 2회 확인했는데 왠지 처리가 많아야 하는 Dot1Q가 빨랐습니다. 수수께끼입니다.

일반 Switch
round-trip min/avg/max/stddev = 1.069/4.698/77.992/13.074 ms
round-trip min/avg/max/stddev = 1.085/4.604/76.116/13.094 ms

Dot1Q+VLAN
round-trip min/avg/max/stddev = 0.997/3.877/70.568/10.973 ms
round-trip min/avg/max/stddev = 1.039/3.469/59.865/9.355 ms

Mirroring 설정



port0의 송수신을 port4로 모니터합니다. 다음은 데이터 시트의 레지스터입니다. 포트는 1 시작입니다.


# etherswitchcfg config vlan_mode NONE
# etherswitchcfg reg 17=0x7f
# etherswitchcfg reg 81=0x9f



port4의 interface로 tcpdump하면 port0의 통신을 확인할 수 있습니다.

etherswitch는 VLAN등의 최저한의 기능은 커멘드로 서포트하지만, 칩에 의해 기능이 다양하기 때문에 개별의 기능은 레지스터 두드려서, 정책과 같습니다.

스위치에의 접속은 SPI나 MDIO, I2C등입니다만, etherswitchcfg로 모두 똑같이 읽고 쓸 수 있는 것은 현실적인 구현이라고 생각합니다.

MIB



mruby-etherswitch를 사용하여 MIB를 선택해 보았습니다.

ks.rb
mib = ARGV[0].to_i

t = EtherSwitch.new(0)

port = 0

while port < 5 do

  t.writereg(110, 0x1c)
  t.writereg(111, (0x20 * port) | mib)
  c = (t.readreg(117) << 24) | (t.readreg(118) << 16)
  c = c | (t.readreg(119) << 8) | t.readreg(120)
  c = c & 0x3fffffff
  if port != 0 then
    print ","
  end

  print c.to_s
  port = port + 1
end

실행해 보겠습니다.
# /usr/local/bin/mruby ks.rb 14
413,0,0,0,0

어쨌든,이 MIB는 액세스 할 때 재설정되는 것 같습니다. bsnmp-ucd에서는 정기적으로 호출되어 마지막 값을 읽을 수 있으므로이 사양이라면 그대로 사용할 수 없습니다. :(

좋은 웹페이지 즐겨찾기