| //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 |
| } |