212 lines
8.3 KiB
Executable File

Silicom Linux RDI Control Utility
1. Compiling, installing and loading the software.
Compiling and installing fm10k driver
tar xzvf fm10k-0.XX.X.tar.gz
cd fm10k-0.XX.X/src
make install
Load fm10k & uio drivers:
modprobe uio
modprobe fm10k
Compiling and installing the rdif software in the system directory:
# cd rdif-xxx
# ./clean
# ./install
NOTE: Use local=1 parameter for local build if needed:
#./install local=1
2. Software loading:
# rdif start
NOTE: The command above performs rdifd daemon start in verbose mode;
in order to run in non-verbose mode, please edit rdif script as below:
# rdifd -v
4. Using the software.
Please use set_port_mask command to permit egress ports list for specific
ingress port, according to desired configuration.
Example (for 4 ports adapter):
rdifctl set_port_mask 5 1,2,3,4
Please refer to RDIF Programmer Guide for more info.
Usage: rdifctl <command> [parameters]
Commands List:
set_cfg - set the device to predefined configuration
get_dev_num - get total number of rdi devices.
set_sw_remain <val> - enable/disable (1/0) remain switch configuration after rdif stop
get_cfg - get current configuration mode
get_port_link <port> - get link status
get_port_speed <port> - get port speed
set_port_parser <port> <val> - set parser level (2,3,4)
get_port_parser <port> - get parser level
set_rframe_update <port> <val> - set bitmask indicating the fields
that will be updated on a routed frame
dmac - bit 0, smac - bit 1, vlan - bit 2
get_rframe_update <port> - get routed frame fields that will be updated
set_ttl_update <port> <val> - enable/disable (1/0) decrement TTL field on routed frames
get_ttl_update <port>
temp_write <addr> <length (1)> <reg>
temp_read <addr> <length>
temp1_write <addr> <length (1)> <reg> - use only for 0x4c address
temp1_read <addr> <length> - use only for 0x4c address
dir - add the rule of a port with direction matching packets to another port
lb - add the rule of a port with send matching packets to load balance group (LBG)
drop - drop matching packets
permit - permit matching packets
mir - copy matching frame to mirror_port (mirror must be created previously, see mir_create)
set_prio - set switch priority for the packet
set_vlan vlan_act <vlan_act> - set vlan1 rule
add_vlan_promisc <port> - add the port to all 2...4095 VLANs
rem_vlan_promisc <port> - remove the port from all 2...4095 VLANs
stat port <port> - get statistic for specific port (port is mandatory)
prio_stat port <port> - get priority statistic for specific port (port is mandatory)
reset_stat port <port> - reset statistic for specific port (port is mandatory)
rule_stat <rule_id> <group>- get statistic (pkts counter) for specific rule (rule_id is mandatory)
query_list <group> - query rule_id list
clear - clear rule stack
clear_group <group> - clear rule stack for specific group
set_port_mask <ingress_port> <egress_port_list example: 1,5,7> - set egress port mask
get_port_mask <ingress_port> - get egress port list
set_reg <addr> <val> - write to RRC register
get_reg <addr> - read from RRC register
bp_write <dev_addr> <len> <data1,data2,data3...>
bp_read <dev_addr> <len>
sfp_write <port num> <offset> <page> <len> <data1,data2,data3...>
sfp_read <port num> <offset> <page> <len>
set_gpio_dir <gpio> <dir> <value> - set GPIO direction & value
gpio: gpio num; dir: 0 - input; 1 - output; 2 - open drain
get_gpio_dir <gpio> - get GPIO direction
set_gpio <gpio> <value> - set GPIO value
get_gpio <gpio> - get GPIO value
prbs <prbs> <dir> <port> - prbs test prbs supp. 7,15,23,31,11,9
get_port_state <port>
loopback <txrx/rxtx/off (1/2/0)> <port>
remove <rule_id> <group> remove rule
query <rule_id> <group> query rule
lbg_query_list - query LBG list
lbg_create <port list, example: 1,2> - create LBG
lbg_del <lbg> - delete LBG
mcg_create - create multicast group, return mcast group number
mcg_get_port <mcast group number> - get mcast group's port
mcg_add_listener <mcast_num> <port> <vlan> - add listener
mcg_del <mcast group number> - delete mcast group
mir_query_list - query mirror list
mir_query_port_list <mirrror_port> - query mirror ports list
mir_create <mirror_port example: 1> <mirror_ports_list example: 2,3> - create mirror
mir_add_port <mirror_port> <port> - add port to mirror
mir_del_port <mirror_port> <port> - delete port from mirror
mir_add_vlan <mirror_port> <vlan_id> - specifies the mirrored frame encapsulation vlan id.
Valid range 1...4095; 0 for no vlan encapsulation
mir_del <mirror_port> - delete mirror
l3_hash <hash params> - set l3 hash
l2_hash <hash params> - set l2 hash
get_l3_hash - get l3 hash
get_l2_hash - get l2 hash
info - print Program Information.
help - print this message.
[parameters] :
for 'permit', 'dir', 'set_prio' and 'drop' commands:
rule_id <rule_id>
src_ip <src_ip>
dst_ip <dst_ip>
dst_port <dst_port>
src_port <src_port>
src_ip_mask <src_ip_mask>
dst_ip_mask <dst_ip_mask>
src_ip6 <src_ip6>
dst_ip6 <dst_ip6>
src_ip6_mask <src_ip6_mask>
dst_ip6_mask <dst_ip6_mask>
group number <group>
ip_proto <ip_proto>
src_port_mask <src_port_mask>
dst_port_mask <dst_port_mask>
vlan <vlan>
vlan_tag <vlan_tag> 1, 2, 3 ,4 for none, standard, user A, user B
vlan_mask <vlan_mask>
prio <0...15>
mpls_type <multi | uni; mandatory for MPLS>
mpls_header <MPLS headers, one or two headers (up to 8 byte)>
mpls_header_mask <MPLS headers mask>
ether_type <ether_type>
src_mac <Source MAC address>
dst_mac <Destination MAC address>
port <1...>
group - ACL number <0...15>
redir_port <1...> (mandatory for dir command)
mir_port (mandatory for mir command)
lbg_num Load Balance Group (LBG) number (for lb command)
for 'set_cfg':
<5> for MON2 (default mode) - egress disabled
for l3_hash:
src_ip_hash, mask of src ip
dst_ip_hash, mask of dst ip
src_port_hash, mask of src port
dst_port_hash, mask of dst port
dscp_hash, 0x0-0xff
isl_usr_hash, 0x0-0xff
proto_hash, protocol mask
flow_hash, 0x0-0xffff
sym_l3_hash, on|off
sym_l4_hash, on|off
random_next_hop, on|off
random_other, on|off
random_only, on|off
for l2_hash:
profile_idx, 0...16 default 0
src_mac_hash, in MAC format
dst_mac_hash, in MAC format
ether_type_hash, 0x0-0xfff
vlan_id_hash, 0x0-0xfff
vlan_pri_hash, 0x0-0xf
vlan2_id_hash, 0x0-0xfff
vlan2_pri_hash, 0x0-0xf
sym_mac_hash, on|off
Entire numerical paramters are in decimal format (123) or hex format (0xabc),
MAC is in aa:bb:cc:dd:ee:ff format.
rdifctl drop port 1 src_ip
rdifctl mir mir_port 5 dst_ip
rdifctl set_port_mask 5 1,2,3,4
rdifctl temp1_write 0x4c 1 1
rdifctl temp1_read 0x4c 1
rdifctl set_vlan vlan_act 9 port 1
rdifctl mir_add_vlan 1 11
Two MPLS example:
rdifctl drop port 1 mpls_type uni mpls_header 0x0000104000001140 mpls_header_mask 0xffffffffffffffff
Single MPLS lable example:
rdifctl drop port 1 mpls_type uni mpls_header 0x1140 mpls_header_mask 0xffffffff
5. Software unloading.
# rdif stop