Skip to content

vpp: portchannel punt via member interface#2440

Open
yue-fred-gao wants to merge 1 commit into
sonic-net:masterfrom
yue-fred-gao:portchannel_punt
Open

vpp: portchannel punt via member interface#2440
yue-fred-gao wants to merge 1 commit into
sonic-net:masterfrom
yue-fred-gao:portchannel_punt

Conversation

@yue-fred-gao

Copy link
Copy Markdown
Contributor

why

The current port-channel implementation punts control-plane packets directly to the PortChannel<id> (bond) netdev.
This does not conform to the SONiC data-plane model. On real hardware the NPU punts control traffic to the CPU on the physical/member port it was received on.
The most visible symptom is DHCP relay. sonic-dhcp-relay / dhcrelay
(the SONiC relay agent) binds and accepts uplink packets only on port-channel member interfaces. Because today's solution delivers the frame on the PortChannel<id> netdev instead of the member, the relay agent never sees the
uplink packet and DHCP relay over a port-channel uplink is broken.

what this PR does

Redesign the punt path for packets to port channel and port channel sub interface using sonic-ext plugin that was created for VLAN/BVI.

Signed-off-by: Yue Gao <yuega2@cisco.com>
@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run

@azure-pipelines

Copy link
Copy Markdown
No pipelines are associated with this pull request.

|---------------|-------------|--------------------------|--------------------|
| **ARP** (main interface) | member phy | member netdev → kernel bond → `PortChannel10` | `linux-cp-punt-xc` → `be10` tap → **`sonic-ext-aggr-tap-redirect` → member tap** |
| **IPv4 unicast for-us** (main interface) | member phy | member netdev → kernel bond → `PortChannel10` | same as ARP |
| **ARP** (sub-interface) | member phy (tagged) | member netdev → bond → 8021q → `PortChannel10.1` | `linux-cp-punt-xc` → `be10.1` tap → **`sonic-ext-aggr-tap-redirect` → member tap (re-push .1Q)** |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hi @yue-fred-gao, please correct me if my understanding is not correct: the packet delivered to be10.1 tap should have a vlan tag(vid1). In member tap (re-push .1Q), the packet will be re-push with a vlan tag. Can the re-pushed vid can be different from the vid in be10.1` tap in some cases?
Section6.3 notes mentioned "No tag strip/re-push is required". It seems that (re-push .1Q) needs to be changed?

@lunyue-ms lunyue-ms left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Thanks, Fred, this HLD is very clear and constructed. From the log, it seems that you have already implemented the main part.

@AkeelAli AkeelAli left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Great design.


## 3. Design Principles (Punt Strategy Summary)

The design utilizes the punt-via-member infra in sonic-exe plugin introduced for VLAN/BVI. It uses

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

typo: sonic-ext plugin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants