Merge branch '1.8'

This commit is contained in:
Bryan Boreham committed 2016-12-08 12:27:40 +00:00
commit bb1cca713d
6 files changed
+117 -8

No files matched your search

+35
View File
@@ -1,6 +1,9 @@
package net
import (
"fmt"
"github.com/Sirupsen/logrus"
"github.com/vishvananda/netlink"
)
@@ -51,3 +54,35 @@ func isDatapath(link netlink.Link) bool {
return false
}
}
func DetectHairpin(portIfName string, log *logrus.Logger) error {
link, err := netlink.LinkByName(portIfName)
if err != nil {
return fmt.Errorf("Unable to find link %q: %s", portIfName, err)
}
ch := make(chan netlink.LinkUpdate)
// See EnsureInterface for why done channel is not passed
if err := netlink.LinkSubscribe(ch, nil); err != nil {
return fmt.Errorf("Unable to subscribe to netlink updates: %s", err)
}
pi, err := netlink.LinkGetProtinfo(link)
if err != nil {
return fmt.Errorf("Unable to get link protinfo %q: %s", portIfName, err)
}
if pi.Hairpin {
return fmt.Errorf("Hairpin mode enabled on %q", portIfName)
}
go func() {
for up := range ch {
if up.Attrs().Name == portIfName && up.Attrs().Protinfo != nil &&
up.Attrs().Protinfo.Hairpin {
log.Errorf("Hairpin mode enabled on %q", portIfName)
}
}
}()
return nil
}