diff --git a/pkg/ovsdb/ovsdb.go b/pkg/ovsdb/ovsdb.go index 51207b0c4..4a9dfaeb8 100644 --- a/pkg/ovsdb/ovsdb.go +++ b/pkg/ovsdb/ovsdb.go @@ -158,13 +158,13 @@ func (ovsd *OvsDriver) ovsdbTransact(ops []ovsdb.Operation) ([]ovsdb.OperationRe // **************** OVS driver API ******************** // CreatePort Create an internal port in OVS -func (ovsd *OvsBridgeDriver) CreatePort(intfName, contNetnsPath, contIfaceName, ovnPortName string, ofportRequest uint, vlanTag uint, trunks []uint, portType string, intfType string) error { +func (ovsd *OvsBridgeDriver) CreatePort(intfName, contNetnsPath, contIfaceName, ovnPortName string, ofportRequest uint, vlanTag uint, trunks []uint, portType string, intfType string, contPodUid string) error { intfUUID, intfOp, err := createInterfaceOperation(intfName, ofportRequest, ovnPortName, intfType) if err != nil { return err } - portUUID, portOp, err := createPortOperation(intfName, contNetnsPath, contIfaceName, vlanTag, trunks, portType, intfUUID) + portUUID, portOp, err := createPortOperation(intfName, contNetnsPath, contIfaceName, vlanTag, trunks, portType, intfUUID, contPodUid) if err != nil { return err } @@ -658,7 +658,7 @@ func (ovsd *OvsDriver) GetOvsPortForContIface(contIface, contNetnsPath string) ( return "", false, err } - condition := ovsdb.NewCondition("external_ids", ovsdb.ConditionEqual, ovsmap) + condition := ovsdb.NewCondition("external_ids", ovsdb.ConditionIncludes, ovsmap) colums := []string{"name", "external_ids"} port, err := ovsd.findByCondition("Port", condition, colums) if err != nil { @@ -853,7 +853,7 @@ func createInterfaceOperation(intfName string, ofportRequest uint, ovnPortName s return intfUUID, &intfOp, nil } -func createPortOperation(intfName, contNetnsPath, contIfaceName string, vlanTag uint, trunks []uint, portType string, intfUUID ovsdb.UUID) (ovsdb.UUID, *ovsdb.Operation, error) { +func createPortOperation(intfName, contNetnsPath, contIfaceName string, vlanTag uint, trunks []uint, portType string, intfUUID ovsdb.UUID, contPodUid string) (ovsdb.UUID, *ovsdb.Operation, error) { portUUIDStr := intfName portUUID := ovsdb.UUID{GoUUID: portUUIDStr} @@ -877,9 +877,10 @@ func createPortOperation(intfName, contNetnsPath, contIfaceName string, vlanTag } oMap, err := ovsdb.NewOvsMap(map[string]string{ - "contNetns": contNetnsPath, - "contIface": contIfaceName, - "owner": ovsPortOwner, + "contPodUid": contPodUid, + "contNetns": contNetnsPath, + "contIface": contIfaceName, + "owner": ovsPortOwner, }) if err != nil { return ovsdb.UUID{}, nil, err diff --git a/pkg/plugin/plugin.go b/pkg/plugin/plugin.go index c2b08aafc..991cf581a 100644 --- a/pkg/plugin/plugin.go +++ b/pkg/plugin/plugin.go @@ -50,8 +50,9 @@ import ( // EnvArgs args containing common, desired mac and ovs port name type EnvArgs struct { cnitypes.CommonArgs - MAC cnitypes.UnmarshallableString `json:"mac,omitempty"` - OvnPort cnitypes.UnmarshallableString `json:"ovnPort,omitempty"` + MAC cnitypes.UnmarshallableString `json:"mac,omitempty"` + OvnPort cnitypes.UnmarshallableString `json:"ovnPort,omitempty"` + K8S_POD_UID cnitypes.UnmarshallableString } func init() { @@ -185,8 +186,8 @@ func getBridgeName(driver *ovsdb.OvsDriver, bridgeName, ovnPort, deviceID string return "", fmt.Errorf("failed to get bridge name") } -func attachIfaceToBridge(ovsDriver *ovsdb.OvsBridgeDriver, hostIfaceName string, contIfaceName string, ofportRequest uint, vlanTag uint, trunks []uint, portType string, intfType string, contNetnsPath string, ovnPortName string) error { - err := ovsDriver.CreatePort(hostIfaceName, contNetnsPath, contIfaceName, ovnPortName, ofportRequest, vlanTag, trunks, portType, intfType) +func attachIfaceToBridge(ovsDriver *ovsdb.OvsBridgeDriver, hostIfaceName string, contIfaceName string, ofportRequest uint, vlanTag uint, trunks []uint, portType string, intfType string, contNetnsPath string, ovnPortName string, contPodUid string) error { + err := ovsDriver.CreatePort(hostIfaceName, contNetnsPath, contIfaceName, ovnPortName, ofportRequest, vlanTag, trunks, portType, intfType, contPodUid) if err != nil { return err } @@ -264,9 +265,11 @@ func CmdAdd(args *skel.CmdArgs) error { var mac string var ovnPort string + var contPodUid string if envArgs != nil { mac = string(envArgs.MAC) ovnPort = string(envArgs.OvnPort) + contPodUid = string(envArgs.K8S_POD_UID) } netconf, err := config.LoadConf(args.StdinData) @@ -356,7 +359,7 @@ func CmdAdd(args *skel.CmdArgs) error { } } - if err = attachIfaceToBridge(ovsBridgeDriver, hostIface.Name, contIface.Name, netconf.OfportRequest, vlanTagNum, trunks, portType, netconf.InterfaceType, args.Netns, ovnPort); err != nil { + if err = attachIfaceToBridge(ovsBridgeDriver, hostIface.Name, contIface.Name, netconf.OfportRequest, vlanTagNum, trunks, portType, netconf.InterfaceType, args.Netns, ovnPort, contPodUid); err != nil { return err } defer func() {