mirror of
https://github.com/moby/moby.git
synced 2026-08-03 14:41:03 +00:00
82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
//go:build linux
|
|
|
|
package macvlan
|
|
|
|
import (
|
|
"net"
|
|
"sync"
|
|
|
|
"github.com/moby/moby/v2/daemon/libnetwork/datastore"
|
|
"github.com/moby/moby/v2/daemon/libnetwork/driverapi"
|
|
"github.com/moby/moby/v2/daemon/libnetwork/scope"
|
|
)
|
|
|
|
const (
|
|
containerVethPrefix = "eth"
|
|
vethPrefix = "veth"
|
|
vethLen = len(vethPrefix) + 7
|
|
NetworkType = "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
|
|
driverModeOpt = "macvlan_mode" // macvlan mode ux opt suffix
|
|
)
|
|
|
|
type driver struct {
|
|
store *datastore.Store
|
|
|
|
// mu protects the networks map.
|
|
mu sync.Mutex
|
|
networks map[string]*network
|
|
}
|
|
|
|
type endpoint struct {
|
|
id string
|
|
nid string
|
|
mac net.HardwareAddr
|
|
addr *net.IPNet
|
|
addrv6 *net.IPNet
|
|
srcName string
|
|
dbIndex uint64
|
|
dbExists bool
|
|
}
|
|
|
|
type network struct {
|
|
id string
|
|
driver *driver
|
|
config *configuration
|
|
|
|
// mu protects the endpoints map.
|
|
mu sync.Mutex
|
|
endpoints map[string]*endpoint
|
|
}
|
|
|
|
// Register initializes and registers the libnetwork macvlan driver
|
|
func Register(r driverapi.Registerer, store *datastore.Store) error {
|
|
d := &driver{
|
|
store: store,
|
|
networks: map[string]*network{},
|
|
}
|
|
if err := d.initStore(); err != nil {
|
|
return err
|
|
}
|
|
return r.RegisterDriver(NetworkType, d, driverapi.Capability{
|
|
DataScope: scope.Local,
|
|
ConnectivityScope: scope.Global,
|
|
})
|
|
}
|
|
|
|
func (d *driver) EndpointOperInfo(nid, eid string) (map[string]any, error) {
|
|
return make(map[string]any), nil
|
|
}
|
|
|
|
func (d *driver) Type() string {
|
|
return NetworkType
|
|
}
|
|
|
|
func (d *driver) IsBuiltIn() bool {
|
|
return true
|
|
}
|