Skip to content
Open
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
13da9fe
Initial code checkin for RoCEv2
satyamsinghKey Nov 21, 2024
c82ca4f
Update auto generated content
actions-user Nov 26, 2024
713ae02
Correct Description
satyamsinghKey Nov 26, 2024
4448a94
Merge branch 'dev_rocev2' of https://github.com/open-traffic-generato…
satyamsinghKey Nov 26, 2024
838d7bc
Update auto generated content
actions-user Nov 26, 2024
6caf646
Adding RoCEv2 in Control Section
satyamsinghKey Nov 28, 2024
1af5f23
Merge branch 'dev_rocev2' of https://github.com/open-traffic-generato…
satyamsinghKey Nov 28, 2024
facc567
Update auto generated content
actions-user Nov 28, 2024
2c13e2c
Adding code for RoCEv2 statistics
satyamsinghKey Nov 29, 2024
172a2c4
Update auto generated content
actions-user Nov 29, 2024
e119120
Correcting names of RoCEv2
satyamsinghKey Nov 29, 2024
0d02fd4
Merge branch 'dev_rocev2' of https://github.com/open-traffic-generato…
satyamsinghKey Nov 29, 2024
571fb89
Update auto generated content
actions-user Nov 29, 2024
88875f1
change RoCEv2 peer name in stats section
satyamsinghKey Nov 29, 2024
94f1f87
Update auto generated content
actions-user Nov 29, 2024
424d11c
Remove RoCEv2 from control_action
satyamsinghKey Dec 2, 2024
d2af6fb
Update auto generated content
actions-user Dec 2, 2024
fc452b2
Changes based on review feedback
satyamsinghKey Dec 16, 2024
23a0e8d
Update auto generated content
actions-user Dec 16, 2024
b4ed901
Adding description for Flow Settings
satyamsinghKey Dec 16, 2024
5d17bb1
Merge branch 'dev_rocev2' of https://github.com/open-traffic-generato…
satyamsinghKey Dec 16, 2024
4caf28d
Update auto generated content
actions-user Dec 16, 2024
cc52fcd
Adding Remote End Fields
satyamsinghKey Jan 12, 2025
9d9947f
Merge branch 'dev_rocev2' of https://github.com/open-traffic-generato…
satyamsinghKey Jan 12, 2025
aa0eecc
Update auto generated content
actions-user Jan 12, 2025
e650c31
default value correction
satyamsinghKey Jan 29, 2025
1548d44
Update auto generated content
actions-user Jan 29, 2025
ef2d9a1
Correction in default Hex String
satyamsinghKey Jan 29, 2025
fb8d1e9
Update auto generated content
actions-user Jan 29, 2025
f3a8031
Removing commented lines and adding Traffic Parameters in Control Plane
satyamsinghKey Feb 4, 2025
273bb7a
Incorporate review comments
satyamsinghKey Feb 4, 2025
b53029a
Update auto generated content
actions-user Feb 4, 2025
660046c
correct format type
satyamsinghKey Feb 4, 2025
f3f4eb9
Merge branch 'dev_rocev2' of https://github.com/open-traffic-generato…
satyamsinghKey Feb 4, 2025
44ba051
Update auto generated content
actions-user Feb 4, 2025
8950e5c
Add traffic parameters in RoCEv2
satyamsinghKey Feb 6, 2025
a1c088c
Update auto generated content
actions-user Feb 6, 2025
3e2e572
Give default values for enums
satyamsinghKey Feb 6, 2025
c8893ad
Update auto generated content
actions-user Feb 6, 2025
6eeb017
Redesign model
satyamsinghKey Feb 11, 2025
9e7a097
Update auto generated content
actions-user Feb 11, 2025
3e7ce6f
Remove initial_psn
satyamsinghKey Feb 11, 2025
49a265c
Update auto generated content
actions-user Feb 11, 2025
eecad6e
correct traffic burst count uid
satyamsinghKey Feb 11, 2025
2d329c5
Update auto generated content
actions-user Feb 11, 2025
81cb0a6
incorporate review changes
satyamsinghKey Feb 18, 2025
862526e
Update auto generated content
actions-user Feb 18, 2025
a6d3c25
Add RoCEv2 Flow stats
satyamsinghKey Feb 25, 2025
9695955
Update auto generated content
actions-user Feb 25, 2025
4c54115
RoCEv2 Traffic Flow Changes
satyamsinghKey Mar 5, 2025
503c516
Update auto generated content
actions-user Mar 5, 2025
7431f37
correct RoCev2 metric name
satyamsinghKey Mar 5, 2025
2d0df4e
correct metrix name
satyamsinghKey Mar 5, 2025
a2d04ec
correct metric name
satyamsinghKey Mar 5, 2025
4c9b9d4
Update auto generated content
actions-user Mar 5, 2025
fd09afb
Reivew changes
satyamsinghKey Mar 6, 2025
397d0e1
Update auto generated content
actions-user Mar 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions artifacts/openapi.html

Large diffs are not rendered by default.

770 changes: 770 additions & 0 deletions artifacts/openapi.yaml

Large diffs are not rendered by default.

474 changes: 474 additions & 0 deletions artifacts/otg.proto

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions control/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ components:
x-field-uid: 2
bgp:
x-field-uid: 3
rocev2:
x-field-uid: 4
x-field-uid: 1
ipv4:
$ref: './ipv4.yaml#/components/schemas/Action.Protocol.Ipv4'
Expand All @@ -78,6 +80,9 @@ components:
bgp:
$ref: './bgp.yaml#/components/schemas/Action.Protocol.Bgp'
x-field-uid: 4
# rocev2:
# $ref: './rocev2.yaml#/components/schemas/Action.Protocol.RoCEv2'
# x-field-uid: 5
Action.Response.Protocol:
description: >-
Response for actions associated with protocols on configured resources.
Expand Down
48 changes: 47 additions & 1 deletion control/protocol.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -266,4 +266,50 @@ components:
up:
x-field-uid: 1
down:
x-field-uid: 2
x-field-uid: 2
State.Protocol.RoCEv2:
description: >-
Sets state of configured RoCEv2 peers.
type: object
required:
- choice
properties:
choice:
type: string
x-enum:
peers:
x-field-uid: 1
x-field-uid: 1
peers:
$ref: '#/components/schemas/State.Protocol.RoCEv2.Peers'
x-field-uid: 2
State.Protocol.RoCEv2.Peers:
description: >-
Sets state of configured RoCEv2 peers.
required:
- state
properties:
peer_names:
description: >-
The names of RoCEv2 peers for which the state has to be applied.
An empty or null list will control all RoCEv2 peers.
type: array
items:
type: string
x-constraint:
- "/components/schemas/RoCEv2.V4Peer/properties/name"
- "/components/schemas/RoCEv2.V6Peer/properties/name"
x-field-uid: 1
state:
description: >-
The desired state of RoCEv2 peer.
If the desired state is 'up', underlying IP interface(s) would be brought up automatically (if not already up), would attempt to bring up the RoCEv2 session(s) and advertise route(s), if configured.
If the desired state is 'down', RoCEv2 session(s) would be brought down.
type: string
x-field-uid: 2
x-enum:
up:
x-field-uid: 1
down:
x-field-uid: 2

7 changes: 6 additions & 1 deletion control/state.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ components:
x-field-uid: 5
ospfv2:
x-field-uid: 6
rocev2:
x-field-uid: 7
x-field-uid: 1
all:
$ref: './protocol.yaml#/components/schemas/State.Protocol.All'
Expand All @@ -109,4 +111,7 @@ components:
x-field-uid: 6
ospfv2:
$ref: './protocol.yaml#/components/schemas/State.Protocol.Ospfv2'
x-field-uid: 7
x-field-uid: 7
rocev2:
$ref: './protocol.yaml#/components/schemas/State.Protocol.RoCEv2'
x-field-uid: 8
5 changes: 5 additions & 0 deletions device/device.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ components:
Configuration for OSPFv2 router.
$ref: './ospfv2/router.yaml#/components/schemas/Device.Ospfv2Router'
x-field-uid: 10
rocev2:
description: >-
Configuration for RoCEv2 .
$ref: './rocev2/rocev2.yaml#/components/schemas/Device.RoCEv2Peer'
x-field-uid: 11
required: [name]
Protocol.Options:
description: >-
Expand Down
109 changes: 109 additions & 0 deletions device/rocev2/flowsettings.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
components:
schemas:
RoCEv2.FlowSettings:
description: >-
This section has two views, Local End and Remote End.
Both views have same configurations. However, the remote and local peer IP addresses are interchanged.
This configuration allows you to configure RDMA flow over the same QP number from same source and destination.
Default value for commands at Remote peer is set to None.
So that by default, this remote peer does not initiate any traffic flow.
type: object
properties:
custom_qp:
description: |-
Turn on to define QP number.
type: boolean
default: false
x-field-uid: 1
custom_qp_number:
description: >-
Configure the QP range.
type: integer
format: uint32
default: 2
minimum: 2
maximum: 33554431
x-field-uid: 2
dscp:
description: >-
DSCP value for this flow
type: integer
format: uint32
default: 24
minimum: 0
maximum: 63
x-field-uid: 3
ecn:
description: >-
This field allows to configure bits of the Traffic Class field in the IPv4 or IPv6 header to encode four different code points.
type: integer
format: uint32
default: 1
minimum: 0
maximum: 3
x-field-uid: 4
udp_source_port:
description: >-
UDP source port number for this flow.
type: integer
format: uint32
default: 49152
minimum: 0
maximum: 65535
x-field-uid: 5
rocev2_verb:
description: >-
RoCEv2 Verb, Available options are: RDMA WRITE None: The corresponding flow will not take part in traffic..
type: string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be a choice. Allows immediate_data to be made visible only for _immediate types. Looks like it is not relevant for the other types.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is correct

default: write
x-enum:
none:
x-field-uid: 1
write:
x-field-uid: 2
write_with_immediate:
x-field-uid: 3
send:
x-field-uid: 4
send_with_immediate:
x-field-uid: 5
x-field-uid: 6
immediate_data:
description: >-
Immediate Data field required for SEND/WRITE with immediate verb.
type: string
format: hex
default: "00000000"
x-field-uid: 7
message_size:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is message_size part of session bring up or is it needed solely for data flows e.g. could a single QP potentially first send a payload of size 1000 bytes and then another of size 10000 bytes ? In which probably should be somewhere in stateful_flow configuration as properties of the data flow , maybe as an array with ixnetwork supporting a single value only for all flows between same qp endpoints. Or is this specification bound that each qp can have single datagram being split and sent on it ?

description: >-
The Maximum message size that is allowed to transfer depends on the MTU size and the number of VLANs configured on the interfaces.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maximum bytes transferred will depend on IB MTU (not Ethernet MTU). So, given message size will be broken into multiple packets viz. WF, WM, WL etc. based on the IB MTU value. We take IB MTU as an user input also.

For any MTU, the maximum number of segmented RDMA WRITE packets for a single WRITE MESSAGE is 65535.
That is, a single RDMA WRITE message can be broken into 1 WRITE FIRST, 1 WRITE LAST and (65535-2) WRITE MIDDLE messages.
The maximum message size that is allowed to be transferred for a given MTU is constrained by the above conditions.
For example, for an MTU size of 1500 bytes,
the common header of the RDMA WRITE MIDDLE/LAST will comprise of
Ethernet Header + IP Header + UDP Header + BTH Header + iCRC size + Ethernet Trailer size. This works out to be 14+20+8+12+4+4 = 62 bytes.
For RDMA WRITE FIRST, we need to add the RETH header size of 16 bytes to the above, which adds up to 78 bytes.
Then the maximum message size for 1500 MTU without VLAN becomes:
1500 - WRITE FIRST common header + 65534 * (1500 - WRITE LAST/MIDDLE header size) = 1500 - 78 + 65534 * (1500 - 62) = 94239314 bytes or 89 MB.
type: integer
format: uint32
default: 1
minimum: 0
maximum: 65535
x-field-uid: 8
message_size_unit:
description: >-
Unit of the transfer message size. Available options are Bytes, KB, MB.
type: string
default: MB
x-enum:
Byte:
x-field-uid: 1
KB:
x-field-uid: 2
MB:
x-field-uid: 3
x-field-uid: 9

84 changes: 84 additions & 0 deletions device/rocev2/rocev2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
components:
schemas:
Device.RoCEv2Peer:
description: >-
Configuration for one or more IPv4 or IPv6 RoCEv2 Peers.
type: object
properties:
ipv4_interfaces:
description: >-
This contains an array of references to IPv4 interfaces, each of which
will have list of peers to different destinations.
type: array
items:
$ref: './rocev2ipv4.yaml#/components/schemas/RoCEv2.V4Interface'
x-field-uid: 1
ipv6_interfaces:
description: >-
This contains an array of references to IPv6 interfaces, each of which
will have list of peers to different destinations.
type: array
items:
$ref: './rocev2ipv6.yaml#/components/schemas/RoCEv2.V6Interface'
x-field-uid: 2
Device.RoCEv2:
description: >-
Configuration for RoCEv2 peer settings.
type: object
properties:
num_of_qps:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this ? Isn' this equal to size of flow_settings ( or rdma_flows/sessions ) array

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The size of flow_settings is decided by num_of_qps

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flow settings is an array so number of times user add a new flow setting will define size of the flow settings array not this. Might need discussion.

description: >-
Maximum number of QP per Endpoint.
type: integer
x-field-uid: 1
remote_end_point_ip_address:
description: >-
Specify the IP address of External NIC i.e Remote End Point IP Address.
type: string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move it to the parent class and define it is ipv4 or ipv6 type for auto validation.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

x-field-uid: 2
ib_mtu:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can just move the ib_mtu to v4 and v6 peer and just remove this object. Model is easier to review and maintain. Or call it RoceAttributes and just have ib_mtu in that and refer to that . Dont need flow_settings which can be directly in the b4 / v6 peer.

description: >-
InfiniBand protocol Maximum Transmission Unit (MTU) defines several fix size MTU: 256, 512, 1024, 2048 or 4096 bytes.
RDMA write message will have payload size same as configured IB MTU. You can configure custom size also.
type: integer
#default: 1024
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this commented.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

corrected

format: uint32
minimum: 0
maximum: 14000
x-field-uid: 3
traffic_burst_mode:
description: >-
Traffic Burst Mode to applied in RoCEv2 Traffic , Continuous or Fixed.
type: string
x-enum:
Continuous:
x-field-uid: 1
Fixed:
x-field-uid: 2
x-field-uid: 4
traffic_burst_count:
description: >-
Burst Count to applied in RoCEv2 Traffic item.
type: integer
#default: 1024
format: uint32
minimum: 0
maximum: 16777216
x-field-uid: 5
name:
description: >-
The name of RoCEv2 Peer
type: string
x-field-uid: 6
flow_settings:
type: array
description: >-
This section has two views, Local End and Remote End.
Both views have same configurations. However, the remote and local peer IP addresses are interchanged.
This configuration allows you to configure RDMA flow over the same QP number from same source and destination.
Default value for commands at Remote peer is set to None.
So that by default, this remote peer does not initiate any traffic flow.
items:
$ref: './flowsettings.yaml#/components/schemas/RoCEv2.FlowSettings'
x-field-uid: 7

51 changes: 51 additions & 0 deletions device/rocev2/rocev2ipv4.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
components:
schemas:
RoCEv2.V4Peer:
description: >-
Configuration for RoCEv2 IPv4 peers.
type: object
required: [num_of_qps, remote_end_point_ip_address, ib_mtu]
properties:
num_of_qps:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this needed ? The number of rdma flows should be simply equal to this.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

num_of_qps decides the num of flows

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to previous, the times user adds an element into the array will define the size .. should not be needing this .

x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/num_of_qps
x-field-uid: 1
remote_end_point_ip_address:
x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/remote_end_point_ip_address
x-field-uid: 2
ib_mtu:
x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/ib_mtu
x-field-uid: 3
traffic_burst_mode:
x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/traffic_burst_mode
x-field-uid: 4
traffic_burst_count:
x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/traffic_burst_count
x-field-uid: 5
name:
x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/name
x-field-uid: 6
flow_settings:
x-include: ./rocev2.yaml#/components/schemas/Device.RoCEv2/properties/flow_settings
x-field-uid: 7


RoCEv2.V4Interface:
description: >-
Configuration for RoCEv2 IPv4 peers.
type: object
required: [ipv4_name]
properties:
ipv4_name:
description: >-
The unique name of the IPv4, used as the source IP for this list of RoCEv2 peers.
type: string
x-constraint:
- '/components/schemas/Device.Ipv4/properties/name'
x-field-uid: 1
peers:
description: >-
This contains the list of RoCEv2 peers configured on this interface.
type: array
items:
$ref: './rocev2ipv4.yaml#/components/schemas/RoCEv2.V4Peer'
x-field-uid: 2
Loading