Selaa lähdekoodia

Add network name

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
Arnaud Porterie 10 vuotta sitten
vanhempi
commit
b9bd3a7dd0

+ 1 - 1
libnetwork/cmd/test/main.go

@@ -14,7 +14,7 @@ func main() {
 	net.IP = ip
 	net.IP = ip
 
 
 	options := libnetwork.DriverParams{"AddressIPv4": net}
 	options := libnetwork.DriverParams{"AddressIPv4": net}
-	netw, err := libnetwork.NewNetwork("simplebridge", options)
+	netw, err := libnetwork.NewNetwork("simplebridge", "dummy", options)
 	if err != nil {
 	if err != nil {
 		log.Fatal(err)
 		log.Fatal(err)
 	}
 	}

+ 6 - 6
libnetwork/drivers.go

@@ -23,7 +23,7 @@ var drivers = map[string]struct {
 //
 //
 // For example:
 // For example:
 //
 //
-//    func CreateTestNetwork(config *TestNetworkConfig()) (Network, error) {
+//    func CreateTestNetwork(name string, config *TestNetworkConfig()) (Network, error) {
 //    }
 //    }
 //
 //
 //    func init() {
 //    func init() {
@@ -32,7 +32,7 @@ var drivers = map[string]struct {
 //
 //
 func RegisterNetworkType(name string, creatorFn interface{}, creatorArg interface{}) error {
 func RegisterNetworkType(name string, creatorFn interface{}, creatorArg interface{}) error {
 	// Validate the creator function signature.
 	// 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()}
 	ctorRet := []reflect.Type{reflect.TypeOf((*Network)(nil)).Elem(), reflect.TypeOf((*error)(nil)).Elem()}
 	if err := validateFunctionSignature(creatorFn, ctorArg, ctorRet); err != nil {
 	if err := validateFunctionSignature(creatorFn, ctorArg, ctorRet); err != nil {
 		sig := fmt.Sprintf("func (%s) (Network, error)", ctorArg[0].Name)
 		sig := fmt.Sprintf("func (%s) (Network, error)", ctorArg[0].Name)
@@ -50,10 +50,10 @@ func RegisterNetworkType(name string, creatorFn interface{}, creatorArg interfac
 	return nil
 	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 {
 	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)
 	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)
 		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)
 	res := reflect.ValueOf(d.creatorFn).Call(arg)
 	return makeCreateResult(res)
 	return makeCreateResult(res)
 }
 }

+ 2 - 2
libnetwork/drivers/bridge/bridge.go

@@ -25,7 +25,7 @@ func init() {
 	libnetwork.RegisterNetworkType(NetworkType, Create, &Configuration{})
 	libnetwork.RegisterNetworkType(NetworkType, Create, &Configuration{})
 }
 }
 
 
-func Create(config *Configuration) (libnetwork.Network, error) {
+func Create(name string, config *Configuration) (libnetwork.Network, error) {
 	bridgeIntfc := NewInterface(config)
 	bridgeIntfc := NewInterface(config)
 	bridgeSetup := NewBridgeSetup(bridgeIntfc)
 	bridgeSetup := NewBridgeSetup(bridgeIntfc)
 
 
@@ -77,5 +77,5 @@ func Create(config *Configuration) (libnetwork.Network, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
-	return &bridgeNetwork{*config}, nil
+	return &bridgeNetwork{NetworkName: name, Config: *config}, nil
 }
 }

+ 3 - 3
libnetwork/drivers/bridge/bridge_test.go

@@ -11,7 +11,7 @@ func TestCreate(t *testing.T) {
 	defer libnetwork.SetupTestNetNS(t)()
 	defer libnetwork.SetupTestNetNS(t)()
 
 
 	config := &Configuration{BridgeName: DefaultBridgeName}
 	config := &Configuration{BridgeName: DefaultBridgeName}
-	netw, err := Create(config)
+	netw, err := Create("dummy", config)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("Failed to create bridge: %v", err)
 		t.Fatalf("Failed to create bridge: %v", err)
 	}
 	}
@@ -25,7 +25,7 @@ func TestCreateFail(t *testing.T) {
 	defer libnetwork.SetupTestNetNS(t)()
 	defer libnetwork.SetupTestNetNS(t)()
 
 
 	config := &Configuration{BridgeName: "dummy0"}
 	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")
 		t.Fatal("Bridge creation was expected to fail")
 	}
 	}
 }
 }
@@ -42,7 +42,7 @@ func TestCreateFullOptions(t *testing.T) {
 	}
 	}
 	_, config.FixedCIDRv6, _ = net.ParseCIDR("2001:db8::/48")
 	_, config.FixedCIDRv6, _ = net.ParseCIDR("2001:db8::/48")
 
 
-	netw, err := Create(config)
+	netw, err := Create("dummy", config)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("Failed to create bridge: %v", err)
 		t.Fatalf("Failed to create bridge: %v", err)
 	}
 	}

+ 6 - 1
libnetwork/drivers/bridge/network.go

@@ -3,7 +3,12 @@ package bridge
 import "github.com/docker/libnetwork"
 import "github.com/docker/libnetwork"
 
 
 type bridgeNetwork struct {
 type bridgeNetwork struct {
-	Config Configuration
+	Config      Configuration
+	NetworkName string
+}
+
+func (b *bridgeNetwork) Name() string {
+	return b.NetworkName
 }
 }
 
 
 func (b *bridgeNetwork) Type() string {
 func (b *bridgeNetwork) Type() string {

+ 17 - 14
libnetwork/network.go

@@ -31,18 +31,6 @@
 //
 //
 package libnetwork
 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
 // 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
 // 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
 // caller to use this information when moving interface SrcName from host
@@ -75,6 +63,21 @@ type Interface struct {
 	MTU int
 	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
 // Namespace represents a network namespace, mounted on a specific Path.  It
 // holds a list of Interface, and more can be added dynamically.
 // holds a list of Interface, and more can be added dynamically.
 type Namespace interface {
 type Namespace interface {
@@ -95,8 +98,8 @@ type Namespace interface {
 
 
 // Create a new network of the specified networkType. The options are driver
 // Create a new network of the specified networkType. The options are driver
 // specific and modeled in a generic way.
 // 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.
 // Create a new network namespace mounted on the specified path.