Skip to content

Commit

Permalink
support ovs/dpdk type
Browse files Browse the repository at this point in the history
  • Loading branch information
John-Lin committed Jul 6, 2018
1 parent 1f307fb commit 4f375ec
Show file tree
Hide file tree
Showing 7 changed files with 157 additions and 13 deletions.
22 changes: 12 additions & 10 deletions src/entity/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,25 @@ import (
type NetworkType string

const (
OVSNetworkType NetworkType = "ovs"
FakeNetworkType NetworkType = "fake"
OVSNetworkType NetworkType = "ovs"
OVSDPDKNetworkType NetworkType = "dpdk"
FakeNetworkType NetworkType = "fake"
)

const (
NetworkCollectionName string = "networks"
)

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"`
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"`
OVSDPDK OVSDPDKNetwork `bson:"ovsdpdk,omitempty" json:"ovsdpdk"`
Fake FakeNetwork `json:"fake"` //FakeNetwork, for restful testing.
}

//GetCollection - get model mongo collection name.
Expand Down
13 changes: 13 additions & 0 deletions src/entity/network_dpdk.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package entity

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"`
}

type OVSDPDKNetwork struct {
BridgeName string `bson:"bridgeName" json:"bridgeName"`
DPDKPhysicalPorts []DPDKPhysicalPort `bson:"physicalPorts" json:"physicalPorts"`
}
51 changes: 51 additions & 0 deletions src/networkcontroller/network_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,57 @@ func (nc *NetworkController) DeleteOVSNetwork(bridgeName string) error {
if err != nil {
return err
}
return nil
}

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

for _, port := range ports {
_, err := nc.ClientCtl.AddDPDKPort(
nc.Context,
&pb.AddPortRequest{
BridgeName: bridgeName,
IfaceName: port.Name,
DpdkDevargs: port.PCIID,
})
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
}

func (nc *NetworkController) DeleteOVSDPDKNetwork(bridgeName string) error {
_, err := nc.ClientCtl.DeleteBridge(
nc.Context,
&pb.DeleteBridgeRequest{
BridgeName: bridgeName,
})
if err != nil {
return err
}
return nil
}
2 changes: 2 additions & 0 deletions src/networkprovider/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ func GetNetworkProvider(network *entity.Network) (NetworkProvider, error) {
switch network.Type {
case entity.OVSNetworkType:
return OVSNetworkProvider{network.OVS}, nil
case entity.OVSDPDKNetworkType:
return OVSDPDKNetworkProvider{network.OVSDPDK}, nil
case entity.FakeNetworkType:
return FakeNetworkProvider{network.Fake}, nil
default:
Expand Down
1 change: 1 addition & 0 deletions src/networkprovider/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ func TestGetNetworkProvider(t *testing.T) {
netProviderType interface{}
}{
{"ovs", entity.OVSNetworkType, reflect.TypeOf(OVSNetworkProvider{})},
{"dpdk", entity.OVSDPDKNetworkType, reflect.TypeOf(OVSDPDKNetworkProvider{})},
{"fake", entity.FakeNetworkType, reflect.TypeOf(FakeNetworkProvider{})},
}

Expand Down
78 changes: 78 additions & 0 deletions src/networkprovider/ovs_dpdk.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package networkprovider

import (
"net"

"github.com/linkernetworks/vortex/src/entity"
"github.com/linkernetworks/vortex/src/networkcontroller"
"github.com/linkernetworks/vortex/src/serviceprovider"
)

type OVSDPDKNetworkProvider struct {
entity.OVSDPDKNetwork
}

func (ovsdpdk OVSDPDKNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Container, network *entity.Network) error {
return nil
}

func (ovsdpdk OVSDPDKNetworkProvider) CreateNetwork(sp *serviceprovider.Container, network *entity.Network) error {
if network.Clusterwise {
nodes, _ := sp.KubeCtl.GetNodes()
for _, v := range nodes {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName())
if err != nil {
return err
}
if err := createOVSDPDKNetwork(nodeIP, network.OVS.BridgeName, network.OVSDPDK.DPDKPhysicalPorts); err != nil {
return err
}
}
return nil
}
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName)
if err != nil {
return err
}
return createOVSDPDKNetwork(nodeIP, network.OVS.BridgeName, network.OVSDPDK.DPDKPhysicalPorts)
}

func (ovsdpdk OVSDPDKNetworkProvider) DeleteNetwork(sp *serviceprovider.Container, network *entity.Network) error {
if network.Clusterwise {
nodes, _ := sp.KubeCtl.GetNodes()
for _, v := range nodes {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName())
if err != nil {
return err
}
if err := deleteOVSNetwork(nodeIP, ovsdpdk.BridgeName); err != nil {
return err
}
}
return nil
}

nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName)
if err != nil {
return err
}
return deleteOVSNetwork(nodeIP, ovsdpdk.BridgeName)
}

func createOVSDPDKNetwork(nodeIP string, bridgeName string, ports []entity.DPDKPhysicalPort) error {
nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT)
nc, err := networkcontroller.New(nodeAddr)
if err != nil {
return err
}
return nc.CreateOVSDPDKNetwork(bridgeName, ports)
}

func deleteOVSDPDKNetwork(nodeIP string, bridgeName string) error {
nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT)
nc, err := networkcontroller.New(nodeAddr)
if err != nil {
return err
}
return nc.DeleteOVSDPDKNetwork(bridgeName)
}
3 changes: 0 additions & 3 deletions src/networkprovider/ovs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,13 @@ import (
"testing"
"time"

//"github.com/linkernetworks/mongo"
"github.com/linkernetworks/vortex/src/config"
"github.com/linkernetworks/vortex/src/entity"
kc "github.com/linkernetworks/vortex/src/kubernetes"
"github.com/linkernetworks/vortex/src/serviceprovider"
"github.com/moby/moby/pkg/namesgenerator"
"github.com/stretchr/testify/suite"

//mgo "gopkg.in/mgo.v2"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
fakeclientset "k8s.io/client-go/kubernetes/fake"
Expand Down

0 comments on commit 4f375ec

Please sign in to comment.