Skip to content

Commit ec597d9

Browse files
committed
feat(dp): store local ofport into pkt_mark
1 parent 3fac17a commit ec597d9

File tree

2 files changed

+31
-16
lines changed

2 files changed

+31
-16
lines changed

pkg/agent/datapath/localBridge.go

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"encoding/binary"
2121
"fmt"
2222
"net"
23+
"strings"
2324
"sync"
2425
"time"
2526

@@ -720,28 +721,42 @@ func (l *LocalBridge) BridgeReset() {
720721
}
721722

722723
func (l *LocalBridge) AddLocalEndpoint(endpoint *Endpoint) error {
724+
// skip ovs patch port
725+
if strings.HasSuffix(endpoint.InterfaceName, LocalToPolicySuffix) {
726+
return nil
727+
}
728+
729+
// skip cni gateway
730+
if l.datapathManager.AgentInfo.LocalGwName == endpoint.InterfaceName {
731+
return nil
732+
}
733+
723734
// Table 0, from local endpoint
724735
var vlanIDMask uint16 = 0x1fff
736+
vlanInputTableFromLocalFlow, _ := l.vlanInputTable.NewFlow(ofctrl.FlowMatch{
737+
Priority: MID_MATCH_FLOW_PRIORITY,
738+
InputPort: endpoint.PortNo,
739+
})
725740
if endpoint.VlanID != 0 {
726-
vlanInputTableFromLocalFlow, _ := l.vlanInputTable.NewFlow(ofctrl.FlowMatch{
727-
Priority: MID_MATCH_FLOW_PRIORITY,
728-
InputPort: endpoint.PortNo,
729-
})
730741
if err := vlanInputTableFromLocalFlow.SetVlan(endpoint.VlanID); err != nil {
731742
return err
732743
}
733-
if err := vlanInputTableFromLocalFlow.Resubmit(nil, &l.localEndpointL2LearningTable.TableId); err != nil {
734-
return err
735-
}
736-
if err := vlanInputTableFromLocalFlow.Resubmit(nil, &l.fromLocalRedirectTable.TableId); err != nil {
737-
return err
738-
}
739-
if err := vlanInputTableFromLocalFlow.Next(ofctrl.NewEmptyElem()); err != nil {
740-
return err
741-
}
742-
log.Infof("add from local endpoint flow: %v", vlanInputTableFromLocalFlow)
743-
l.fromLocalEndpointFlow[endpoint.PortNo] = vlanInputTableFromLocalFlow
744744
}
745+
if err := vlanInputTableFromLocalFlow.LoadField("nxm_nx_pkt_mark", uint64(endpoint.PortNo),
746+
openflow13.NewNXRange(0, 15)); err != nil {
747+
return err
748+
}
749+
if err := vlanInputTableFromLocalFlow.Resubmit(nil, &l.localEndpointL2LearningTable.TableId); err != nil {
750+
return err
751+
}
752+
if err := vlanInputTableFromLocalFlow.Resubmit(nil, &l.fromLocalRedirectTable.TableId); err != nil {
753+
return err
754+
}
755+
if err := vlanInputTableFromLocalFlow.Next(ofctrl.NewEmptyElem()); err != nil {
756+
return err
757+
}
758+
log.Infof("add from local endpoint flow: %v", vlanInputTableFromLocalFlow)
759+
l.fromLocalEndpointFlow[endpoint.PortNo] = vlanInputTableFromLocalFlow
745760

746761
// Table 1, from local to local bum redirect flow
747762
endpointMac, _ := net.ParseMAC(endpoint.MacAddrStr)

pkg/agent/datapath/multiBridgeDatapath_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ var (
8383

8484
rule1Flow = `table=60, priority=200,icmp,nw_src=10.100.100.1,nw_dst=10.100.100.2 ` +
8585
`actions=load:0x->NXM_NX_XXREG0[60..87],load:0x->NXM_NX_XXREG0[0..3],goto_table:70`
86-
ep1VlanInputFlow = "table=0, priority=200,in_port=11 actions=push_vlan:0x8100,set_field:4097->vlan_vid,resubmit(,10),resubmit(,15)"
86+
ep1VlanInputFlow = "table=0, priority=200,in_port=11 actions=load:0xb->NXM_NX_PKT_MARK[0..15],push_vlan:0x8100,set_field:4097->vlan_vid,resubmit(,10),resubmit(,15)"
8787
ep1LocalToLocalFlow = "table=5, priority=200,dl_vlan=1,dl_src=00:00:aa:aa:aa:aa actions=load:0xb->NXM_OF_IN_PORT[],load:0->NXM_OF_VLAN_TCI[0..12],NORMAL"
8888
)
8989

0 commit comments

Comments
 (0)