From 72f0d353f64d75b2fd77a7b68e8610795514e598 Mon Sep 17 00:00:00 2001 From: jojimt Date: Wed, 13 Jul 2016 06:45:34 -0700 Subject: [PATCH] Fix netplugin restart issue in ACI mode --- drivers/ovsSwitch.go | 15 ++++++++------- drivers/ovsdriver.go | 2 +- systemtests/aci_test.go | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/drivers/ovsSwitch.go b/drivers/ovsSwitch.go index aad8c3cdb..77fdd7481 100755 --- a/drivers/ovsSwitch.go +++ b/drivers/ovsSwitch.go @@ -339,7 +339,7 @@ func (sw *OvsSwitch) CreatePort(intfName string, cfgEp *mastercfg.CfgEndpointSta } // UpdatePort updates an OVS port without creating it -func (sw *OvsSwitch) UpdatePort(intfName string, cfgEp *mastercfg.CfgEndpointState, pktTag int, skipVethPair bool) error { +func (sw *OvsSwitch) UpdatePort(intfName string, cfgEp *mastercfg.CfgEndpointState, pktTag, nwPktTag int, skipVethPair bool) error { // Get OVS port name ovsPortName := getOvsPortName(intfName, skipVethPair) @@ -356,12 +356,13 @@ func (sw *OvsSwitch) UpdatePort(intfName string, cfgEp *mastercfg.CfgEndpointSta // Build the endpoint info endpoint := ofnet.EndpointInfo{ - PortNo: ofpPort, - MacAddr: macAddr, - Vlan: uint16(pktTag), - IpAddr: net.ParseIP(cfgEp.IPAddress), - Ipv6Addr: net.ParseIP(cfgEp.IPv6Address), - EndpointGroup: cfgEp.EndpointGroupID, + PortNo: ofpPort, + MacAddr: macAddr, + Vlan: uint16(nwPktTag), + IpAddr: net.ParseIP(cfgEp.IPAddress), + Ipv6Addr: net.ParseIP(cfgEp.IPv6Address), + EndpointGroup: cfgEp.EndpointGroupID, + EndpointGroupVlan: uint16(pktTag), } // Add the local port to ofnet diff --git a/drivers/ovsdriver.go b/drivers/ovsdriver.go index e99e0bd52..0a73d1366 100755 --- a/drivers/ovsdriver.go +++ b/drivers/ovsdriver.go @@ -283,7 +283,7 @@ func (d *OvsDriver) CreateEndpoint(id string) error { log.Printf("Found matching oper state for ep %s, noop", id) // Ask the switch to update the port - err = sw.UpdatePort(operEp.PortName, cfgEp, pktTag, skipVethPair) + err = sw.UpdatePort(operEp.PortName, cfgEp, pktTag, cfgNw.PktTag, skipVethPair) if err != nil { log.Errorf("Error creating port %s. Err: %v", intfName, err) return err diff --git a/systemtests/aci_test.go b/systemtests/aci_test.go index e7b515f37..28e015e2d 100755 --- a/systemtests/aci_test.go +++ b/systemtests/aci_test.go @@ -66,6 +66,21 @@ func (s *systemtestSuite) TestACIMode(c *C) { // Verify cA1 cannot ping cB1 c.Assert(cA1.checkPingFailure(cB1.eth0.ip), IsNil) + log.Infof("Triggering netplugin restart") + node1 := s.nodes[0] + c.Assert(node1.stopNetplugin(), IsNil) + c.Assert(node1.rotateLog("netplugin"), IsNil) + c.Assert(node1.startNetplugin(""), IsNil) + c.Assert(node1.runCommandUntilNoError("pgrep netplugin"), IsNil) + time.Sleep(20 * time.Second) + + // Verify cA1 can ping cA2 + c.Assert(cA1.checkPingWithCount(cA2.eth0.ip, 3), IsNil) + // Verify cB1 can ping cB2 + c.Assert(cB1.checkPingWithCount(cB2.eth0.ip, 3), IsNil) + // Verify cA1 cannot ping cB1 + c.Assert(cA1.checkPingFailureWithCount(cB1.eth0.ip, 5), IsNil) + c.Assert(s.removeContainers([]*container{cA1, cA2, cB1, cB2}), IsNil) c.Assert(s.cli.EndpointGroupDelete("default", "epgA"), IsNil) c.Assert(s.cli.EndpointGroupDelete("default", "epgB"), IsNil)