<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 10, 2015 at 2:22 PM, Jonas Gorski <span dir="ltr"><<a href="mailto:jogo@openwrt.org" target="_blank">jogo@openwrt.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Feb 23, 2015 at 4:55 PM, Alexandru Ardelean<br>
<<a href="mailto:ardeleanalex@gmail.com">ardeleanalex@gmail.com</a>> wrote:<br>
> From: Alexandru Ardelean <<a href="mailto:ardeleanalex@gmail.com">ardeleanalex@gmail.com</a>><br>
><br>
> Read/Write operations for the ARL table.<br>
> To use it:<br>
>    swconfig dev switch0 set arl "rd XX:XX:XX:XX:XX:XX vid NNNN"<br>
>    swconfig dev switch0 get arl<br>
><br>
> Output should be:<br>
>   ARL Operation: Read<br>
>     MAC: XX:XX:XX:XX:XX:XX<br>
>     VLAN ID: NNNN<br>
>     Valid: 1<br>
>     Age: 1<br>
>     Static: 0<br>
>     Port(s): 001<br>
><br>
> Reading/Writing the ARL table is a bit complex of an operation,<br>
> so string parsing is used.<br>
> The idea is that this uses swconfig 'set' prepare a r/w operation<br>
> and swconfig 'get' to execute an operation.<br>
> Not the most elegant approach, but it works fairly well for a<br>
> debugging operation using b53 hardware.<br>
><br>
> There are 3 op codes: rd, wr and cl. 'cl' clears any previous rd/wr.<br>
> This parsing is stupid simple, so any spaces, cases and quotes matter.<br>
> If a operation failed, the output will be 'failed' and the kernel<br>
> log can be consulted. The kernel log can also be consulted for<br>
> various messages that may have been printed during a r/w operation.<br>
><br>
> For 'rd' and 'wr' ops<br>
>  - if VLAN not enabled, only the MAC address is required<br>
>  - if VLAN is enabled, both MAC and VLAN ID are required<br>
><br>
> Commands:<br>
>  - swconfig dev switch0 set arl cl - clear any prev op; no 'get' call required<br>
>  - swconfig dev switch0 set arl "rd <MAC> <VID>" - the call 'get',<br>
>      if output is 'failed' check kernel log<br>
>  - swconfig dev switch0 set arl "rd <MAC> <VID> \<br>
>    [static 0/1] [age 0/1] [valid 0/1] [ports NNN]"<br>
><br>
> The write operation takes parameters, static, age and valid, which<br>
> are bits that can be set/modified in the ARL table.<br>
><br>
> The ports must field is dependant on the type of MAC.<br>
>  - for unicat MACs, ports is a port number<br>
>  - for multicast MACs, ports is a bitmask for ports on which to forward<br>
> This is the same meaning when reading MAC/VID entries.<br>
<br>
</div></div>ARL table access is something very common in switch chips, I think it<br>
would make more sense to come up with an API for swconfig for the<br>
switches to implement that instead of cooking up our own language for<br>
each switch driver.<br>
<br>
So generally I am thinking of something like<br>
<br>
swconfig dev switch0 arl find <mac> [vid <vid]<br>
swconfig dev switch0 arl delete <mac> [vid <vid>]<br>
swconfig dev switch0 arl add <mac> [vid <vid>] [ports <ports>] [static <0|1>]<br>
swconfig dev switch0 arl add_port <mac> [vid <vid>] port <port> <-<br>
this might be useful for igmpproxy & co, to update multicast<br>
forwarding tables in the switch itself.<br>
swconfig dev switch0 arl del_port <mac> [vid <vid>] port <port><br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
Jonas<br>
</font></span></blockquote></div><br></div><div class="gmail_extra">That's actually a pretty good idea.<br></div><div class="gmail_extra">Will consider it when re-submitting.<br></div></div>