Skip to content

Commit

Permalink
support generic userspace datapath & merge userspace and kernelspace …
Browse files Browse the repository at this point in the history
…datapath entity
  • Loading branch information
John-Lin committed Jul 9, 2018
1 parent 8c10636 commit acc01e4
Show file tree
Hide file tree
Showing 12 changed files with 245 additions and 167 deletions.
18 changes: 9 additions & 9 deletions src/entity/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ const (
)

type Network struct {
ID bson.ObjectId `bson:"_id,omitempty" json:"id"`
Type NetworkType `bson:"type" json:"type"`
Name string `bson:"name" json:"name"`
Clusterwise bool `bson:"clusterwise" json:"clusterwise"`
NodeName string `bson:"nodeName,omitempty" json:"nodeName,omitempty"`
CreatedAt *time.Time `bson:"createdAt,omitempty" json:"createdAt,omitempty"`
OVS OVSNetwork `bson:"ovs,omitempty" json:"ovs"`
OVSDPDK OVSDPDKNetwork `bson:"ovsdpdk,omitempty" json:"ovsdpdk"`
Fake FakeNetwork `json:"fake"` //FakeNetwork, for restful testing.
ID bson.ObjectId `bson:"_id,omitempty" json:"id"`
Type NetworkType `bson:"type" json:"type"`
Name string `bson:"name" json:"name"`
Clusterwise bool `bson:"clusterwise" json:"clusterwise"`
NodeName string `bson:"nodeName,omitempty" json:"nodeName,omitempty"`
CreatedAt *time.Time `bson:"createdAt,omitempty" json:"createdAt,omitempty"`
OVS OVSNetwork `bson:"ovs,omitempty" json:"ovs"`
OVSUserspace OVSUserspaceNetwork `bson:"ovsUserspace,omitempty" json:"ovsUserspace"`
Fake FakeNetwork `json:"fake"` //FakeNetwork, for restful testing.
}

//GetCollection - get model mongo collection name.
Expand Down
13 changes: 0 additions & 13 deletions src/entity/network_dpdk.go

This file was deleted.

18 changes: 18 additions & 0 deletions src/entity/network_ovs.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,30 @@
package entity

// physical NIC port
type PhysicalPort struct {
Name string `bson:"name" json:"name"`
MTU int `bson:"MTU" json:"MTU"`
VlanTags []int32 `bson:"vlanTags" MTC:"vlanTags"`
}

// physical NIC port dpdk enabled
type DPDKPhysicalPort struct {
Name string `bson:"name" json:"name"`
MTU int `bson:"MTU" json:"MTU"`
PCIID string `bson:"pciID" json:"pciID"`
VlanTags []int32 `bson:"vlanTags" json:"vlanTags"`
}

// kernel space datapath
type OVSNetwork struct {
BridgeName string `bson:"bridgeName" json:"bridgeName"`
PhysicalPorts []PhysicalPort `bson:"physicalPorts" json:"physicalPorts"`
}

// userspace space datapath
type OVSUserspaceNetwork struct {
BridgeName string `bson:"bridgeName" json:"bridgeName"`
// exclusive fields
PhysicalPorts []PhysicalPort `bson:"physicalPorts" json:"physicalPorts"`
DPDKPhysicalPorts []DPDKPhysicalPort `bson:"dpdkPhysicalPorts" json:"dpdkPhysicalPorts"`
}
39 changes: 33 additions & 6 deletions src/networkcontroller/network_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,41 @@ func (nc *NetworkController) CreateOVSDPDKNetwork(bridgeName string, ports []ent
return nil
}

func (nc *NetworkController) DeleteOVSDPDKNetwork(bridgeName string) error {
_, err := nc.ClientCtl.DeleteBridge(
func (nc *NetworkController) CreateOVSUserpsaceNetwork(bridgeName string, ports []entity.PhysicalPort) error {
if _, err := nc.ClientCtl.CreateBridge(
nc.Context,
&pb.DeleteBridgeRequest{
BridgeName: bridgeName,
})
if err != nil {
&pb.CreateBridgeRequest{
BridgeName: bridgeName,
DatapathType: "netdev",
}); err != nil {
return err
}

for _, port := range ports {
_, err := nc.ClientCtl.AddPort(
nc.Context,
&pb.AddPortRequest{
BridgeName: bridgeName,
IfaceName: port.Name,
})
if err != nil {
return err
}

if len(port.VlanTags) > 0 {
_, err := nc.ClientCtl.SetPort(
nc.Context,
&pb.SetPortRequest{
IfaceName: port.Name,
Options: &pb.PortOptions{
VLANMode: "trunk",
Trunk: port.VlanTags,
},
})
if err != nil {
return err
}
}
}
return nil
}
31 changes: 30 additions & 1 deletion src/networkcontroller/network_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,36 @@ func (suite *NetworkControllerTestSuite) TestCreateNetwork() {
suite.NoError(err)
nc, err := New(net.JoinHostPort(nodeIP, DEFAULT_CONTROLLER_PORT))
suite.NoError(err)
err = nc.CreateOVSNetwork(tName, network.OVS.PhysicalPorts)
err = nc.CreateOVSNetwork(tName, network.OVSUserspace.PhysicalPorts)
suite.NoError(err)

//TODO we need support the list function to check the ovs is existed
defer exec.Command("ovs-vsctl", "del-br", tName).Run()
}

func (suite *NetworkControllerTestSuite) TestCreateOVSUserpsaceNetwork() {
eth1 := entity.PhysicalPort{
Name: suite.ifName,
MTU: 1500,
VlanTags: []int32{2043, 2143, 2243},
}

tName := namesgenerator.GetRandomName(0)
network := entity.Network{
Name: tName,
OVSUserspace: entity.OVSUserspaceNetwork{
BridgeName: tName,
PhysicalPorts: []entity.PhysicalPort{eth1},
},
Type: "netdev",
NodeName: suite.nodeName,
}

nodeIP, err := suite.kubectl.GetNodeExternalIP(suite.nodeName)
suite.NoError(err)
nc, err := New(net.JoinHostPort(nodeIP, DEFAULT_CONTROLLER_PORT))
suite.NoError(err)
err = nc.CreateOVSUserpsaceNetwork(tName, network.OVS.PhysicalPorts)
suite.NoError(err)

//TODO we need support the list function to check the ovs is existed
Expand Down
2 changes: 1 addition & 1 deletion src/networkprovider/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func GetNetworkProvider(network *entity.Network) (NetworkProvider, error) {
case entity.OVSKernelspaceNetworkType:
return OVSNetworkProvider{network.OVS}, nil
case entity.OVSUserspaceNetworkType:
return OVSDPDKNetworkProvider{network.OVSDPDK}, nil
return OVSUserspaceNetworkProvider{network.OVSUserspace}, nil
case entity.FakeNetworkType:
return FakeNetworkProvider{network.Fake}, nil
default:
Expand Down
2 changes: 1 addition & 1 deletion src/networkprovider/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func TestGetNetworkProvider(t *testing.T) {
netProviderType interface{}
}{
{"system", entity.OVSKernelspaceNetworkType, reflect.TypeOf(OVSNetworkProvider{})},
{"netdev", entity.OVSUserspaceNetworkType, reflect.TypeOf(OVSDPDKNetworkProvider{})},
{"netdev", entity.OVSUserspaceNetworkType, reflect.TypeOf(OVSUserspaceNetworkProvider{})},
{"fake", entity.FakeNetworkType, reflect.TypeOf(FakeNetworkProvider{})},
}

Expand Down
105 changes: 0 additions & 105 deletions src/networkprovider/ovs_dpdk.go

This file was deleted.

Loading

0 comments on commit acc01e4

Please sign in to comment.