github.com/docker/engine@v22.0.0-20211208180946-d456264580cf+incompatible/libnetwork/drivers/ipvlan/ipvlan.go (about) 1 //go:build linux 2 // +build linux 3 4 package ipvlan 5 6 import ( 7 "net" 8 "sync" 9 10 "github.com/docker/docker/libnetwork/datastore" 11 "github.com/docker/docker/libnetwork/discoverapi" 12 "github.com/docker/docker/libnetwork/driverapi" 13 "github.com/docker/docker/libnetwork/types" 14 ) 15 16 const ( 17 vethLen = 7 18 containerVethPrefix = "eth" 19 vethPrefix = "veth" 20 ipvlanType = "ipvlan" // driver type name 21 modeL2 = "l2" // ipvlan mode l2 is the default 22 modeL3 = "l3" // ipvlan L3 mode 23 parentOpt = "parent" // parent interface -o parent 24 modeOpt = "_mode" // ipvlan mode ux opt suffix 25 ) 26 27 var driverModeOpt = ipvlanType + modeOpt // mode -o ipvlan_mode 28 29 type endpointTable map[string]*endpoint 30 31 type networkTable map[string]*network 32 33 type driver struct { 34 networks networkTable 35 sync.Once 36 sync.Mutex 37 store datastore.DataStore 38 } 39 40 type endpoint struct { 41 id string 42 nid string 43 mac net.HardwareAddr 44 addr *net.IPNet 45 addrv6 *net.IPNet 46 srcName string 47 dbIndex uint64 48 dbExists bool 49 } 50 51 type network struct { 52 id string 53 endpoints endpointTable 54 driver *driver 55 config *configuration 56 sync.Mutex 57 } 58 59 // Init initializes and registers the libnetwork ipvlan driver 60 func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { 61 c := driverapi.Capability{ 62 DataScope: datastore.LocalScope, 63 ConnectivityScope: datastore.GlobalScope, 64 } 65 d := &driver{ 66 networks: networkTable{}, 67 } 68 if err := d.initStore(config); err != nil { 69 return err 70 } 71 72 return dc.RegisterDriver(ipvlanType, d, c) 73 } 74 75 func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { 76 return nil, types.NotImplementedErrorf("not implemented") 77 } 78 79 func (d *driver) NetworkFree(id string) error { 80 return types.NotImplementedErrorf("not implemented") 81 } 82 83 func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) { 84 return make(map[string]interface{}), nil 85 } 86 87 func (d *driver) Type() string { 88 return ipvlanType 89 } 90 91 func (d *driver) IsBuiltIn() bool { 92 return true 93 } 94 95 func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error { 96 return nil 97 } 98 99 func (d *driver) RevokeExternalConnectivity(nid, eid string) error { 100 return nil 101 } 102 103 // DiscoverNew is a notification for a new discovery event. 104 func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error { 105 return nil 106 } 107 108 // DiscoverDelete is a notification for a discovery delete event. 109 func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error { 110 return nil 111 } 112 113 func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) { 114 } 115 116 func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) { 117 return "", nil 118 }