From 32e59e92c29d955c5631d90c3c5807ddaf3e4c5c Mon Sep 17 00:00:00 2001 From: John-Lin Date: Fri, 13 Jul 2018 15:23:24 +0800 Subject: [PATCH 1/3] generate bridge name --- src/networkprovider/network.go | 7 +++++++ src/networkprovider/network_test.go | 5 +++++ src/networkprovider/ovs_netdev.go | 4 ++-- src/networkprovider/ovs_system.go | 2 +- src/utils/utils.go | 14 ++++++++++++++ src/utils/utils_test.go | 12 ++++++++++++ 6 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/utils/utils.go create mode 100644 src/utils/utils_test.go diff --git a/src/networkprovider/network.go b/src/networkprovider/network.go index c4d83613..26ec9a96 100644 --- a/src/networkprovider/network.go +++ b/src/networkprovider/network.go @@ -5,6 +5,7 @@ import ( "github.com/linkernetworks/vortex/src/entity" "github.com/linkernetworks/vortex/src/serviceprovider" + "github.com/linkernetworks/vortex/src/utils" ) type NetworkProvider interface { @@ -30,3 +31,9 @@ func GetNetworkProvider(network *entity.Network) (NetworkProvider, error) { return nil, fmt.Errorf("unsupported Network Type %s", network.Type) } } + +func generateBridgeName(datapathType, networkName string) string { + tmp := fmt.Sprintf("%s%s", datapathType, networkName) + str := utils.SHA256String(tmp) + return fmt.Sprintf("ovs-%s-%s", datapathType, str[0:6]) +} diff --git a/src/networkprovider/network_test.go b/src/networkprovider/network_test.go index 1d2bf1d7..a7f46ddb 100644 --- a/src/networkprovider/network_test.go +++ b/src/networkprovider/network_test.go @@ -39,3 +39,8 @@ func TestGetNetworkProviderFail(t *testing.T) { }) assert.Error(t, err) } + +func TestGenerateBridgeName(t *testing.T) { + ans := generateBridgeName("netdev", "my network 1") + assert.Equal(t, "ovs-netdev-de0165", ans) +} diff --git a/src/networkprovider/ovs_netdev.go b/src/networkprovider/ovs_netdev.go index 2644409e..c0386c56 100644 --- a/src/networkprovider/ovs_netdev.go +++ b/src/networkprovider/ovs_netdev.go @@ -24,7 +24,7 @@ func (unp userspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) if unp.IsDPDKPort { if err := createOVSDPDKNetwork( nodeIP, - unp.BridgeName, + generateBridgeName(string(unp.Type), unp.Name), node.PhyInterfaces, unp.VLANTags, ); err != nil { @@ -33,7 +33,7 @@ func (unp userspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) } else { if err := createOVSUserspaceNetwork( nodeIP, - unp.BridgeName, + generateBridgeName(string(unp.Type), unp.Name), node.PhyInterfaces, unp.VLANTags, ); err != nil { diff --git a/src/networkprovider/ovs_system.go b/src/networkprovider/ovs_system.go index ecdc6752..d5cbb042 100644 --- a/src/networkprovider/ovs_system.go +++ b/src/networkprovider/ovs_system.go @@ -23,7 +23,7 @@ func (knp kernelspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Containe } if err := createOVSNetwork( nodeIP, - knp.BridgeName, + generateBridgeName(string(knp.Type), knp.Name), node.PhyInterfaces, knp.VLANTags, ); err != nil { diff --git a/src/utils/utils.go b/src/utils/utils.go new file mode 100644 index 00000000..179b63f9 --- /dev/null +++ b/src/utils/utils.go @@ -0,0 +1,14 @@ +package utils + +import ( + "crypto/sha256" + "encoding/hex" + "fmt" +) + +func SHA256String(str string) string { + hash := sha256.New() + hash.Write([]byte(str)) + md := hash.Sum(nil) + return fmt.Sprintf("%s", hex.EncodeToString(md)) +} diff --git a/src/utils/utils_test.go b/src/utils/utils_test.go new file mode 100644 index 00000000..ff60df71 --- /dev/null +++ b/src/utils/utils_test.go @@ -0,0 +1,12 @@ +package utils + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGenerateVethName(t *testing.T) { + o := SHA256String("12345678") + assert.Equal(t, "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f", o) +} From fb47d4d7a220d9c8a246c7bf6000dfa6fab24322 Mon Sep 17 00:00:00 2001 From: John-Lin Date: Fri, 13 Jul 2018 16:05:56 +0800 Subject: [PATCH 2/3] overwrite bridge name --- src/networkprovider/network.go | 2 +- src/networkprovider/network_test.go | 2 +- src/networkprovider/ovs_netdev.go | 4 ++-- src/networkprovider/ovs_system.go | 2 +- src/server/handler_network.go | 3 +++ 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/networkprovider/network.go b/src/networkprovider/network.go index 26ec9a96..ea1c085f 100644 --- a/src/networkprovider/network.go +++ b/src/networkprovider/network.go @@ -32,7 +32,7 @@ func GetNetworkProvider(network *entity.Network) (NetworkProvider, error) { } } -func generateBridgeName(datapathType, networkName string) string { +func GenerateBridgeName(datapathType, networkName string) string { tmp := fmt.Sprintf("%s%s", datapathType, networkName) str := utils.SHA256String(tmp) return fmt.Sprintf("ovs-%s-%s", datapathType, str[0:6]) diff --git a/src/networkprovider/network_test.go b/src/networkprovider/network_test.go index a7f46ddb..d75f37fa 100644 --- a/src/networkprovider/network_test.go +++ b/src/networkprovider/network_test.go @@ -41,6 +41,6 @@ func TestGetNetworkProviderFail(t *testing.T) { } func TestGenerateBridgeName(t *testing.T) { - ans := generateBridgeName("netdev", "my network 1") + ans := GenerateBridgeName("netdev", "my network 1") assert.Equal(t, "ovs-netdev-de0165", ans) } diff --git a/src/networkprovider/ovs_netdev.go b/src/networkprovider/ovs_netdev.go index c0386c56..2644409e 100644 --- a/src/networkprovider/ovs_netdev.go +++ b/src/networkprovider/ovs_netdev.go @@ -24,7 +24,7 @@ func (unp userspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) if unp.IsDPDKPort { if err := createOVSDPDKNetwork( nodeIP, - generateBridgeName(string(unp.Type), unp.Name), + unp.BridgeName, node.PhyInterfaces, unp.VLANTags, ); err != nil { @@ -33,7 +33,7 @@ func (unp userspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) } else { if err := createOVSUserspaceNetwork( nodeIP, - generateBridgeName(string(unp.Type), unp.Name), + unp.BridgeName, node.PhyInterfaces, unp.VLANTags, ); err != nil { diff --git a/src/networkprovider/ovs_system.go b/src/networkprovider/ovs_system.go index d5cbb042..ecdc6752 100644 --- a/src/networkprovider/ovs_system.go +++ b/src/networkprovider/ovs_system.go @@ -23,7 +23,7 @@ func (knp kernelspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Containe } if err := createOVSNetwork( nodeIP, - generateBridgeName(string(knp.Type), knp.Name), + knp.BridgeName, node.PhyInterfaces, knp.VLANTags, ); err != nil { diff --git a/src/server/handler_network.go b/src/server/handler_network.go index f8d798d9..102738ef 100644 --- a/src/server/handler_network.go +++ b/src/server/handler_network.go @@ -25,6 +25,9 @@ func createNetworkHandler(ctx *web.Context) { return } + // overwrite the bridge name + network.BridgeName = np.GenerateBridgeName(string(network.Type), network.Name) + session := sp.Mongo.NewSession() defer session.Close() session.C(entity.NetworkCollectionName).EnsureIndex( From 92b3007b12f2c58e2a69dba0ca39f1a2bc4caa2d Mon Sep 17 00:00:00 2001 From: John-Lin Date: Fri, 13 Jul 2018 16:18:04 +0800 Subject: [PATCH 3/3] typos --- src/utils/utils_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/utils_test.go b/src/utils/utils_test.go index ff60df71..7c69de1a 100644 --- a/src/utils/utils_test.go +++ b/src/utils/utils_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" ) -func TestGenerateVethName(t *testing.T) { +func TestSHA256String(t *testing.T) { o := SHA256String("12345678") assert.Equal(t, "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f", o) }