From b8d4f907ceae3d2a96c1b7ba4eaa19e68953ebe6 Mon Sep 17 00:00:00 2001 From: Arnaud Porterie Date: Mon, 2 Mar 2015 10:17:12 -0800 Subject: [PATCH] Add network name Signed-off-by: Arnaud Porterie --- cmd/test/main.go | 2 +- drivers.go | 12 ++++++------ drivers/bridge/bridge.go | 4 ++-- drivers/bridge/bridge_test.go | 6 +++--- drivers/bridge/network.go | 7 ++++++- network.go | 31 +++++++++++++++++-------------- 6 files changed, 35 insertions(+), 27 deletions(-) diff --git a/cmd/test/main.go b/cmd/test/main.go index 2acb395..f723460 100644 --- a/cmd/test/main.go +++ b/cmd/test/main.go @@ -14,7 +14,7 @@ func main() { net.IP = ip options := libnetwork.DriverParams{"AddressIPv4": net} - netw, err := libnetwork.NewNetwork("simplebridge", options) + netw, err := libnetwork.NewNetwork("simplebridge", "dummy", options) if err != nil { log.Fatal(err) } diff --git a/drivers.go b/drivers.go index 5b7af74..4781337 100644 --- a/drivers.go +++ b/drivers.go @@ -23,7 +23,7 @@ var drivers = map[string]struct { // // For example: // -// func CreateTestNetwork(config *TestNetworkConfig()) (Network, error) { +// func CreateTestNetwork(name string, config *TestNetworkConfig()) (Network, error) { // } // // func init() { @@ -32,7 +32,7 @@ var drivers = map[string]struct { // func RegisterNetworkType(name string, creatorFn interface{}, creatorArg interface{}) error { // Validate the creator function signature. - ctorArg := []reflect.Type{reflect.TypeOf(creatorArg)} + ctorArg := []reflect.Type{reflect.TypeOf((*string)(nil)), reflect.TypeOf(creatorArg)} ctorRet := []reflect.Type{reflect.TypeOf((*Network)(nil)).Elem(), reflect.TypeOf((*error)(nil)).Elem()} if err := validateFunctionSignature(creatorFn, ctorArg, ctorRet); err != nil { sig := fmt.Sprintf("func (%s) (Network, error)", ctorArg[0].Name) @@ -50,10 +50,10 @@ func RegisterNetworkType(name string, creatorFn interface{}, creatorArg interfac return nil } -func createNetwork(name string, generic DriverParams) (Network, error) { - d, ok := drivers[name] +func createNetwork(networkType, name string, generic DriverParams) (Network, error) { + d, ok := drivers[networkType] if !ok { - return nil, fmt.Errorf("unknown driver %q", name) + return nil, fmt.Errorf("unknown driver %q", networkType) } config, err := options.GenerateFromModel(options.Generic(generic), d.creatorArg) @@ -61,7 +61,7 @@ func createNetwork(name string, generic DriverParams) (Network, error) { return nil, fmt.Errorf("failed to generate driver config: %v", err) } - arg := []reflect.Value{reflect.ValueOf(config)} + arg := []reflect.Value{reflect.ValueOf(name), reflect.ValueOf(config)} res := reflect.ValueOf(d.creatorFn).Call(arg) return makeCreateResult(res) } diff --git a/drivers/bridge/bridge.go b/drivers/bridge/bridge.go index f9b9ce9..728ab8e 100644 --- a/drivers/bridge/bridge.go +++ b/drivers/bridge/bridge.go @@ -25,7 +25,7 @@ func init() { libnetwork.RegisterNetworkType(NetworkType, Create, &Configuration{}) } -func Create(config *Configuration) (libnetwork.Network, error) { +func Create(name string, config *Configuration) (libnetwork.Network, error) { bridgeIntfc := NewInterface(config) bridgeSetup := NewBridgeSetup(bridgeIntfc) @@ -77,5 +77,5 @@ func Create(config *Configuration) (libnetwork.Network, error) { return nil, err } - return &bridgeNetwork{*config}, nil + return &bridgeNetwork{NetworkName: name, Config: *config}, nil } diff --git a/drivers/bridge/bridge_test.go b/drivers/bridge/bridge_test.go index fb71c25..f596632 100644 --- a/drivers/bridge/bridge_test.go +++ b/drivers/bridge/bridge_test.go @@ -11,7 +11,7 @@ func TestCreate(t *testing.T) { defer libnetwork.SetupTestNetNS(t)() config := &Configuration{BridgeName: DefaultBridgeName} - netw, err := Create(config) + netw, err := Create("dummy", config) if err != nil { t.Fatalf("Failed to create bridge: %v", err) } @@ -25,7 +25,7 @@ func TestCreateFail(t *testing.T) { defer libnetwork.SetupTestNetNS(t)() config := &Configuration{BridgeName: "dummy0"} - if _, err := Create(config); err == nil { + if _, err := Create("dummy", config); err == nil { t.Fatal("Bridge creation was expected to fail") } } @@ -42,7 +42,7 @@ func TestCreateFullOptions(t *testing.T) { } _, config.FixedCIDRv6, _ = net.ParseCIDR("2001:db8::/48") - netw, err := Create(config) + netw, err := Create("dummy", config) if err != nil { t.Fatalf("Failed to create bridge: %v", err) } diff --git a/drivers/bridge/network.go b/drivers/bridge/network.go index 039dd00..c9b5364 100644 --- a/drivers/bridge/network.go +++ b/drivers/bridge/network.go @@ -3,7 +3,12 @@ package bridge import "github.com/docker/libnetwork" type bridgeNetwork struct { - Config Configuration + Config Configuration + NetworkName string +} + +func (b *bridgeNetwork) Name() string { + return b.NetworkName } func (b *bridgeNetwork) Type() string { diff --git a/network.go b/network.go index 544e854..5cb8fe2 100644 --- a/network.go +++ b/network.go @@ -31,18 +31,6 @@ // package libnetwork -// A Network represents a logical connectivity zone that containers may -// ulteriorly join using the Link method. A Network is managed by a specific -// driver. -type Network interface { - // The type of network, which corresponds to its managing driver. - Type() string - - // Create a new link to this network symbolically identified by the - // specified unique name. - Link(name string) ([]*Interface, error) -} - // Interface represents the settings and identity of a network device. It is // used as a return type for Network.Link, and it is common practice for the // caller to use this information when moving interface SrcName from host @@ -75,6 +63,21 @@ type Interface struct { MTU int } +// A Network represents a logical connectivity zone that containers may +// ulteriorly join using the Link method. A Network is managed by a specific +// driver. +type Network interface { + // A user chosen name for this network. + Name() string + + // The type of network, which corresponds to its managing driver. + Type() string + + // Create a new link to this network symbolically identified by the + // specified unique name. + Link(name string) ([]*Interface, error) +} + // Namespace represents a network namespace, mounted on a specific Path. It // holds a list of Interface, and more can be added dynamically. type Namespace interface { @@ -95,8 +98,8 @@ type Namespace interface { // Create a new network of the specified networkType. The options are driver // specific and modeled in a generic way. -func NewNetwork(networkType string, options DriverParams) (Network, error) { - return createNetwork(networkType, options) +func NewNetwork(networkType, name string, options DriverParams) (Network, error) { + return createNetwork(networkType, name, options) } // Create a new network namespace mounted on the specified path.