blob: 4103a1c5887648d6f55dc7d09daeb2abbafacd8d [file]
//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
}