/
Ovs CLI Enhancements

Ovs CLI Enhancements

PicOS ovs cli has some enhancements from version 2.7.1.

List ovs Configuration

PicOS ovs added a new command to display the current configuration by traversing the ovsdb tables. The command is:

ovs-vsctl show-running-config 

admin@PicOS-OVS$ovs-vsctl show-running-config
Open_vSwitch c645ee8a-34d5-4c64-a3dc-0c1a20f3c26e
  Bridge "br0"
    datapath_id: "1c48cc37ab254bc1"
    datapath_type: "pica8"
    Port "ge-1/1/19"
      Interface "ge-1/1/19"
        type: "pica8"
      tag: 1
      vlan_mode: trunk
    Port "br0"
      Interface "br0"
        mtu: 1500
        type: internal
  Pica8 ecafe6f4-97ac-407b-b4df-c871b5cd9561
    hardware_type: "as4610_54t"
admin@PicOS-OVS$

List System Resources Usage

Adds two commands to display current system resources usage and interfaces.

When we show system resources usage, the current mode is cared, such as match-mode, udf-mode, L2-mode, L3-mode, combinate-mode and egress-mode.

The commands are:

         ovs-appctl pica/show tables

         ovs-appctl pica/show interfaces

admin@PicOS-OVS$ovs-appctl pica/show tables
Pica Tables Statistics:
    Pica Tables              Max Limitation          Current Used
    -----------------------------------------------------------------------
    ICAP Table                 2046                    9         
    ECAP Table                 (null)                  (null)    
    VCAP Table                 1024                    0         
    L2 System Table            (null)                  (null)    
    L2 FDB Table               (null)                  (null)    
    L3 Host Table              (null)                  (null)    
    L3 Route Table             (null)                  (null)    
    UDF Table                  (null)                  (null)    
admin@PicOS-OVS$
admin@PicOS-OVS$
admin@PicOS-OVS$ovs-appctl pica/show interfaces
Valid Interfaces On Switch P3290:
Physical interfaces:
ge-1/1/1(1) ge-1/1/2(2) ge-1/1/3(3) ge-1/1/4(4)
ge-1/1/5(5) ge-1/1/6(6) ge-1/1/7(7) ge-1/1/8(8)
ge-1/1/9(9) ge-1/1/10(10) ge-1/1/11(11) ge-1/1/12(12)
ge-1/1/13(13) ge-1/1/14(14) ge-1/1/15(15) ge-1/1/16(16)
ge-1/1/17(17) ge-1/1/18(18) ge-1/1/19(19) ge-1/1/20(20)
ge-1/1/21(21) ge-1/1/22(22) ge-1/1/23(23) ge-1/1/24(24)
ge-1/1/25(25) ge-1/1/26(26) ge-1/1/27(27) ge-1/1/28(28)
ge-1/1/29(29) ge-1/1/30(30) ge-1/1/31(31) ge-1/1/32(32)
ge-1/1/33(33) ge-1/1/34(34) ge-1/1/35(35) ge-1/1/36(36)
ge-1/1/37(37) ge-1/1/38(38) ge-1/1/39(39) ge-1/1/40(40)
ge-1/1/41(41) ge-1/1/42(42) ge-1/1/43(43) ge-1/1/44(44)
ge-1/1/45(45) ge-1/1/46(46) ge-1/1/47(47) ge-1/1/48(48)
te-1/1/49(49) te-1/1/50(50) te-1/1/51(51) te-1/1/52(52)
LAG interfaces: ae1(1025) - ae1023(2047)
Bond interfaces: bond1(2049) - bond1023(3071)
GRE interfaces: gre1(3073) - gre1023(4095)
VXLAN interfaces: vxlan1(4097) - vxlan1023(5119)
L2GRE interfaces: l2gre1(5121) - l2gre1023(6143)
admin@PicOS-OVS$

Associate sw-flow with hw-flow

When a new flow entry is added, a unique 64bit flow-id is assigned to it. The flow-id can be used by ovs-ofctl and ovs-appctl to filter the flow entries and associate sw-flow with hw-flow.

The commands are:

ovs-ofctl dump-flows br0 [flow_id=n]

ovs-appctl pica/dump-flows [flow_id=n]


Example 1:

root@PicOS-OVS$ovs-ofctl add-flow br0 priority=200,in_port=1,actions=2
root@PicOS-OVS$ovs-ofctl add-flow br0 priority=124,in_port=1,ip,nw_src=10.10.10.10,actions=4
root@PicOS-OVS$ovs-ofctl dump-flows br0
OFPST_FLOW reply (OF1.4) (xid=0x2):
 cookie=0x0, duration=36.591s, flow_id=1, table=0, n_packets=n/a, n_bytes=0, priority=200,in_port=1 actions=output:2
 cookie=0x0, duration=6.393s, flow_id=2, table=0, n_packets=n/a, n_bytes=0, priority=124,ip,in_port=1,nw_src=10.10.10.10 actions=output:4
root@PicOS-OVS$ovs-appctl pica/dump-flows
#4 normal permanent flow_id=1, priority=124,recirc_id=0,ip,in_port=1,nw_src=10.10.10.10, actions:2
#3 normal permanent flow_id=1, priority=200,recirc_id=0,in_port=1, actions:2
#0 normal_d permanent priority=0,recirc_id=0, actions:drop
Total 3 flows in HW.

From the above example, if two flow entries in table 0 don’t have the exact same match and priority, but the match of sw-flow which has higher priority can cover another sw-flow’s match, then two hw-flows with the same flow-id of sw-flow which has the higher priority will be installed.

 

Example 2:

root@PicOS-OVS$ovs-ofctl add-flow br0 priority=200,in_port=1,actions=goto_table:1
root@PicOS-OVS$ovs-ofctl add-flow br0 table=1,priority=101,in_port=1,ip,nw_src=10.10.10.11,actions=2
root@PicOS-OVS$ovs-ofctl add-flow br0 table=1,priority=102,ip,nw_src=10.10.10.12,actions=goto_table:2
root@PicOS-OVS$ovs-ofctl add-flow br0 table=2,priority=123,dl_dst=00:11:22:33:44:55,actions=3 
root@PicOS-OVS$
root@PicOS-OVS$ovs-ofctl dump-flows br0
OFPST_FLOW reply (OF1.4) (xid=0x2):
 cookie=0x0, duration=184.078s, flow_id=1, table=0, n_packets=n/a, n_bytes=0, priority=200,in_port=1 actions=goto_table:1
 cookie=0x0, duration=49.800s, flow_id=2, table=1, n_packets=n/a, n_bytes=0, priority=102,ip,nw_src=10.10.10.12 actions=goto_table:2
 cookie=0x0, duration=107.575s, flow_id=3, table=1, n_packets=n/a, n_bytes=0, priority=101,ip,in_port=1,nw_src=10.10.10.11 actions=output:2
 cookie=0x0, duration=7.991s, flow_id=4, table=2, n_packets=n/a, n_bytes=0, priority=123,dl_dst=00:11:22:33:44:55 actions=output:3
root@PicOS-OVS$ovs-appctl pica/dump-flows
#6 normal permanent flow_id=1, priority=201,recirc_id=0,ip,in_port=1,dl_dst=00:11:22:33:44:55,nw_src=10.10.10.12, actions:3
#5 normal permanent flow_id=1, priority=200,recirc_id=0,ip,in_port=1,nw_src=10.10.10.11, actions:2
#0 normal_d permanent priority=0,recirc_id=0, actions:drop
Total 3 flows in HW.

If a flow entry in table 0 has goto action, then the flow-id will be applied to all hw-flows generated by it. Only the flow-id's of sw-flows in first table are cared now.

Display dpid in both hex and decimal

When the status of bridge is shown, we add decimal numbers for dpid to display.

admin@PicOS-OVS$ovs-ofctl show br0
OFPT_FEATURES_REPLY (OF1.4) (xid=0x2):
dpid:0x1c48cc37ab254bc1(2038103370851765185)
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS GROUP_STATS
OFPST_PORT_DESC reply (OF1.4) (xid=0x3):
 13(ge-1/1/13): addr:cc:37:ab:25:4b:c1
     config:     0
     state:      LINK_UP
     current:    100MB-FD COPPER AUTO_NEG
     advertised: 10MB-FD 100MB-FD 1GB-FD COPPER AUTO_NEG
     supported:  10MB-FD 100MB-FD 1GB-FD COPPER AUTO_NEG
     peer:       10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER
     speed: 100 Mbps now, 1000 Mbps max
LOCAL(br0): addr:cc:37:ab:25:4b:c1
     config:     0
     state:      LINK_UP
     current:    10MB-FD COPPER
     supported:  10MB-FD COPPER
     speed: 10 Mbps now, 10 Mbps max
OFPT_GET_CONFIG_REPLY (OF1.4) (xid=0x5): frags=normal miss_send_len=0

List Interface Details

A command is added to display the details of a specific interface or all interfaces in the bridge. A corresponding openflow multipart message should be added by using multipart experimenter type, the controller can then get these statistics as well.

The command is:

ovs-ofctl dump-interfaces <bridge> [interface]

 

Example:

Add the following flow:

admin@PicOS-OVS$ovs-ofctl add-flow br0 in_port=13,actions=15

No packets:

admin@PicOS-OVS$ovs-ofctl  dump-interfaces br0 ge-1/1/15   
PXST_INTERFACE_STATS reply (OF1.4) (xid=0x4): 1 interfaces
  ge-1/1/15(port 15):
     Traffic statistics:
        Input Packets............................0
        Output Packets...........................0
        Input Octets.............................0
        Output Octets............................0

 

Port 13 send unicast packets to match the flow and check:

admin@PicOS-OVS$ovs-ofctl  dump-interfaces br0 ge-1/1/13
PXST_INTERFACE_STATS reply (OF1.4) (xid=0x4): 1 interfaces
  ge-1/1/13(port 13):
     Traffic statistics:
        Input Packets............................3013397
        Output Packets...........................0
        Input Octets.............................771429632
        Output Octets............................0
     Transmit:
        Unicast packets........................0
        Multicast packets......................0
        Broadcast packets......................0
        Packets 64 Octets......................0
        Packets 65-127 Octets..................0
        Packets 128-255 Octets.................0
        Packets 256-511 Octets.................0
        Packets 512-1023 Octets................0
        Packets 1024-1518 Octets...............0
        Oversize Packets.......................0
        Total Packets Without Errors...........0
        Discarded Packets......................0
        Total Packets With Errors..............0
        Single Collision Frames................0
        Multiple Collision Frames..............0
        Deferred Frames........................0
        Late Collisions........................0
        Excessive Collisions...................0
        Pause Frames...........................0
     Receive:
        Unicast packets........................3013393
        Multicast packets......................0
        Broadcast packets......................0
        Packets 64 Octets......................0
        Packets 65-127 Octets..................0
        Packets 128-255 Octets.................0
        Packets 256-511 Octets.................3013396
        Packets 512-1023 Octets................0
        Packets 1024-1518 Octets...............0
        Oversize Packets.......................0
        Total Packets Without Errors...........3013397
        Discarded Packets......................0
        Total Packets With Errors..............0
        Alignment Errors.......................0
        FCS Errors.............................0
        Collisions.............................0
        Pause Frames...........................0

Copyright © 2025 Pica8 Inc. All Rights Reserved.