Преглед на файлове

Check parameter --ip --ip6 --link-local-ip in

Signed-off-by: chchliang <chen.chuanliang@zte.com.cn>
chchliang преди 8 години
родител
ревизия
b7ce6ce02e
променени са 1 файла, в които са добавени 22 реда и са изтрити 5 реда
  1. 22 5
      container/container.go

+ 22 - 5
container/container.go

@@ -667,15 +667,32 @@ func (container *Container) BuildCreateEndpointOptions(n libnetwork.Network, epC
 
 
 	if epConfig != nil {
 	if epConfig != nil {
 		ipam := epConfig.IPAMConfig
 		ipam := epConfig.IPAMConfig
-		if ipam != nil && (ipam.IPv4Address != "" || ipam.IPv6Address != "" || len(ipam.LinkLocalIPs) > 0) {
-			var ipList []net.IP
+
+		if ipam != nil {
+			var (
+				ipList          []net.IP
+				ip, ip6, linkip net.IP
+			)
+
 			for _, ips := range ipam.LinkLocalIPs {
 			for _, ips := range ipam.LinkLocalIPs {
-				if ip := net.ParseIP(ips); ip != nil {
-					ipList = append(ipList, ip)
+				if linkip = net.ParseIP(ips); linkip == nil && ips != "" {
+					return nil, fmt.Errorf("Invalid link-local IP address:%s", ipam.LinkLocalIPs)
 				}
 				}
+				ipList = append(ipList, linkip)
+
+			}
+
+			if ip = net.ParseIP(ipam.IPv4Address); ip == nil && ipam.IPv4Address != "" {
+				return nil, fmt.Errorf("Invalid IPv4 address:%s)", ipam.IPv4Address)
 			}
 			}
+
+			if ip6 = net.ParseIP(ipam.IPv6Address); ip6 == nil && ipam.IPv6Address != "" {
+				return nil, fmt.Errorf("Invalid IPv6 address:%s)", ipam.IPv6Address)
+			}
+
 			createOptions = append(createOptions,
 			createOptions = append(createOptions,
-				libnetwork.CreateOptionIpam(net.ParseIP(ipam.IPv4Address), net.ParseIP(ipam.IPv6Address), ipList, nil))
+				libnetwork.CreateOptionIpam(ip, ip6, ipList, nil))
+
 		}
 		}
 
 
 		for _, alias := range epConfig.Aliases {
 		for _, alias := range epConfig.Aliases {