github.com/moby/docker@v26.1.3+incompatible/libnetwork/drivers/ipvlan/ipvlan.go (about) 1 //go:build linux 2 3 package ipvlan 4 5 import ( 6 "net" 7 "sync" 8 9 "github.com/docker/docker/libnetwork/datastore" 10 "github.com/docker/docker/libnetwork/driverapi" 11 "github.com/docker/docker/libnetwork/scope" 12 "github.com/docker/docker/libnetwork/types" 13 ) 14 15 const ( 16 containerVethPrefix = "eth" 17 vethPrefix = "veth" 18 vethLen = len(vethPrefix) + 7 19 20 NetworkType = "ipvlan" // driver type name 21 parentOpt = "parent" // parent interface -o parent 22 driverModeOpt = "ipvlan_mode" // mode -o ipvlan_mode 23 driverFlagOpt = "ipvlan_flag" // flag -o ipvlan_flag 24 25 modeL2 = "l2" // ipvlan L2 mode (default) 26 modeL3 = "l3" // ipvlan L3 mode 27 modeL3S = "l3s" // ipvlan L3S mode 28 29 flagBridge = "bridge" // ipvlan flag bridge (default) 30 flagPrivate = "private" // ipvlan flag private 31 flagVepa = "vepa" // ipvlan flag vepa 32 ) 33 34 type endpointTable map[string]*endpoint 35 36 type networkTable map[string]*network 37 38 type driver struct { 39 networks networkTable 40 sync.Once 41 sync.Mutex 42 store *datastore.Store 43 } 44 45 type endpoint struct { 46 id string 47 nid string 48 mac net.HardwareAddr 49 addr *net.IPNet 50 addrv6 *net.IPNet 51 srcName string 52 dbIndex uint64 53 dbExists bool 54 } 55 56 type network struct { 57 id string 58 endpoints endpointTable 59 driver *driver 60 config *configuration 61 sync.Mutex 62 } 63 64 // Register initializes and registers the libnetwork ipvlan driver. 65 func Register(r driverapi.Registerer, config map[string]interface{}) error { 66 d := &driver{ 67 networks: networkTable{}, 68 } 69 if err := d.initStore(config); err != nil { 70 return err 71 } 72 return r.RegisterDriver(NetworkType, d, driverapi.Capability{ 73 DataScope: scope.Local, 74 ConnectivityScope: scope.Global, 75 }) 76 } 77 78 func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { 79 return nil, types.NotImplementedErrorf("not implemented") 80 } 81 82 func (d *driver) NetworkFree(id string) error { 83 return types.NotImplementedErrorf("not implemented") 84 } 85 86 func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) { 87 return make(map[string]interface{}), nil 88 } 89 90 func (d *driver) Type() string { 91 return NetworkType 92 } 93 94 func (d *driver) IsBuiltIn() bool { 95 return true 96 } 97 98 func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error { 99 return nil 100 } 101 102 func (d *driver) RevokeExternalConnectivity(nid, eid string) error { 103 return nil 104 } 105 106 func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) { 107 } 108 109 func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) { 110 return "", nil 111 }