2016-02-16 22:15:18 -05:00
|
|
|
package macvlan
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net"
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/docker/libnetwork/datastore"
|
|
|
|
"github.com/docker/libnetwork/discoverapi"
|
|
|
|
"github.com/docker/libnetwork/driverapi"
|
|
|
|
"github.com/docker/libnetwork/osl"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
vethLen = 7
|
|
|
|
containerVethPrefix = "eth"
|
|
|
|
vethPrefix = "veth"
|
2016-03-02 20:13:15 -05:00
|
|
|
macvlanType = "macvlan" // driver type name
|
|
|
|
modePrivate = "private" // macvlan mode private
|
|
|
|
modeVepa = "vepa" // macvlan mode vepa
|
|
|
|
modeBridge = "bridge" // macvlan mode bridge
|
|
|
|
modePassthru = "passthru" // macvlan mode passthrough
|
|
|
|
parentOpt = "parent" // parent interface -o parent
|
|
|
|
modeOpt = "_mode" // macvlan mode ux opt suffix
|
2016-02-16 22:15:18 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
var driverModeOpt = macvlanType + modeOpt // mode --option macvlan_mode
|
|
|
|
|
|
|
|
type endpointTable map[string]*endpoint
|
|
|
|
|
|
|
|
type networkTable map[string]*network
|
|
|
|
|
|
|
|
type driver struct {
|
|
|
|
networks networkTable
|
|
|
|
sync.Once
|
|
|
|
sync.Mutex
|
|
|
|
store datastore.DataStore
|
|
|
|
}
|
|
|
|
|
|
|
|
type endpoint struct {
|
|
|
|
id string
|
|
|
|
mac net.HardwareAddr
|
|
|
|
addr *net.IPNet
|
|
|
|
addrv6 *net.IPNet
|
|
|
|
srcName string
|
|
|
|
}
|
|
|
|
|
|
|
|
type network struct {
|
|
|
|
id string
|
|
|
|
sbox osl.Sandbox
|
|
|
|
endpoints endpointTable
|
|
|
|
driver *driver
|
|
|
|
config *configuration
|
|
|
|
sync.Mutex
|
|
|
|
}
|
|
|
|
|
|
|
|
// Init initializes and registers the libnetwork macvlan driver
|
|
|
|
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
|
|
|
|
c := driverapi.Capability{
|
|
|
|
DataScope: datastore.LocalScope,
|
|
|
|
}
|
|
|
|
d := &driver{
|
|
|
|
networks: networkTable{},
|
|
|
|
}
|
|
|
|
d.initStore(config)
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return dc.RegisterDriver(macvlanType, d, c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
|
|
|
|
return make(map[string]interface{}, 0), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) Type() string {
|
|
|
|
return macvlanType
|
|
|
|
}
|
|
|
|
|
|
|
|
// DiscoverNew is a notification for a new discovery event
|
|
|
|
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// DiscoverDelete is a notification for a discovery delete event
|
|
|
|
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
|
|
|
|
return nil
|
|
|
|
}
|