Просмотр исходного кода

Change in programming iptables in container

- iptables to provide a native API
- resolver.go to invoke the iptables native API
  when programming tables in the container

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch 9 лет назад
Родитель
Сommit
defcd4afb9
2 измененных файлов с 13 добавлено и 2 удалено
  1. 12 1
      libnetwork/iptables/iptables.go
  2. 1 1
      libnetwork/resolver.go

+ 12 - 1
libnetwork/iptables/iptables.go

@@ -325,9 +325,11 @@ func Raw(args ...string) ([]byte, error) {
 		if err == nil || !strings.Contains(err.Error(), "was not provided by any .service files") {
 		if err == nil || !strings.Contains(err.Error(), "was not provided by any .service files") {
 			return output, err
 			return output, err
 		}
 		}
-
 	}
 	}
+	return raw(args...)
+}
 
 
+func raw(args ...string) ([]byte, error) {
 	if err := initCheck(); err != nil {
 	if err := initCheck(); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
@@ -362,6 +364,15 @@ func RawCombinedOutput(args ...string) error {
 	return nil
 	return nil
 }
 }
 
 
+// RawCombinedOutputNative behave as RawCombinedOutput with the difference it
+// will always invoke `iptables` binary
+func RawCombinedOutputNative(args ...string) error {
+	if output, err := raw(args...); err != nil || len(output) != 0 {
+		return fmt.Errorf("%s (%v)", string(output), err)
+	}
+	return nil
+}
+
 // ExistChain checks if a chain exists
 // ExistChain checks if a chain exists
 func ExistChain(chain string, table Table) bool {
 func ExistChain(chain string, table Table) bool {
 	if _, err := Raw("-t", string(table), "-L", chain); err == nil {
 	if _, err := Raw("-t", string(table), "-L", chain); err == nil {

+ 1 - 1
libnetwork/resolver.go

@@ -95,7 +95,7 @@ func (r *resolver) SetupFunc() func() {
 		}
 		}
 
 
 		for _, rule := range rules {
 		for _, rule := range rules {
-			r.err = iptables.RawCombinedOutput(rule...)
+			r.err = iptables.RawCombinedOutputNative(rule...)
 			if r.err != nil {
 			if r.err != nil {
 				return
 				return
 			}
 			}