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  }