12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package bridge
- import (
- "net"
- "github.com/vishvananda/netlink"
- )
- const (
- // DefaultBridgeName is the default name for the bridge interface managed
- // by the driver when unspecified by the caller.
- DefaultBridgeName = "docker0"
- )
- // Interface models the bridge network device.
- type bridgeInterface struct {
- Config *Configuration
- Link netlink.Link
- bridgeIPv4 *net.IPNet
- bridgeIPv6 *net.IPNet
- }
- // NewInterface creates a new bridge interface structure. It attempts to find
- // an already existing device identified by the Configuration BridgeName field,
- // or the default bridge name when unspecified), but doesn't attempt to create
- // on when missing
- func newInterface(config *Configuration) *bridgeInterface {
- i := &bridgeInterface{
- Config: config,
- }
- // Initialize the bridge name to the default if unspecified.
- if i.Config.BridgeName == "" {
- i.Config.BridgeName = DefaultBridgeName
- }
- // Attempt to find an existing bridge named with the specified name.
- i.Link, _ = netlink.LinkByName(i.Config.BridgeName)
- return i
- }
- // Exists indicates if the existing bridge interface exists on the system.
- func (i *bridgeInterface) exists() bool {
- return i.Link != nil
- }
- // Addresses returns a single IPv4 address and all IPv6 addresses for the
- // bridge interface.
- func (i *bridgeInterface) addresses() (netlink.Addr, []netlink.Addr, error) {
- v4addr, err := netlink.AddrList(i.Link, netlink.FAMILY_V4)
- if err != nil {
- return netlink.Addr{}, nil, err
- }
- v6addr, err := netlink.AddrList(i.Link, netlink.FAMILY_V6)
- if err != nil {
- return netlink.Addr{}, nil, err
- }
- if len(v4addr) == 0 {
- return netlink.Addr{}, v6addr, nil
- }
- return v4addr[0], v6addr, nil
- }
|