github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/drivers/macvlan/macvlan_state.go (about)

     1  package macvlan
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/docker/libnetwork/osl"
     7  	"github.com/docker/libnetwork/types"
     8  	"github.com/sirupsen/logrus"
     9  )
    10  
    11  func (d *driver) network(nid string) *network {
    12  	d.Lock()
    13  	n, ok := d.networks[nid]
    14  	d.Unlock()
    15  	if !ok {
    16  		logrus.Errorf("network id %s not found", nid)
    17  	}
    18  
    19  	return n
    20  }
    21  
    22  func (d *driver) addNetwork(n *network) {
    23  	d.Lock()
    24  	d.networks[n.id] = n
    25  	d.Unlock()
    26  }
    27  
    28  func (d *driver) deleteNetwork(nid string) {
    29  	d.Lock()
    30  	delete(d.networks, nid)
    31  	d.Unlock()
    32  }
    33  
    34  // getNetworks Safely returns a slice of existing networks
    35  func (d *driver) getNetworks() []*network {
    36  	d.Lock()
    37  	defer d.Unlock()
    38  
    39  	ls := make([]*network, 0, len(d.networks))
    40  	for _, nw := range d.networks {
    41  		ls = append(ls, nw)
    42  	}
    43  
    44  	return ls
    45  }
    46  
    47  func (n *network) endpoint(eid string) *endpoint {
    48  	n.Lock()
    49  	defer n.Unlock()
    50  
    51  	return n.endpoints[eid]
    52  }
    53  
    54  func (n *network) addEndpoint(ep *endpoint) {
    55  	n.Lock()
    56  	n.endpoints[ep.id] = ep
    57  	n.Unlock()
    58  }
    59  
    60  func (n *network) deleteEndpoint(eid string) {
    61  	n.Lock()
    62  	delete(n.endpoints, eid)
    63  	n.Unlock()
    64  }
    65  
    66  func (n *network) getEndpoint(eid string) (*endpoint, error) {
    67  	n.Lock()
    68  	defer n.Unlock()
    69  	if eid == "" {
    70  		return nil, fmt.Errorf("endpoint id %s not found", eid)
    71  	}
    72  	if ep, ok := n.endpoints[eid]; ok {
    73  		return ep, nil
    74  	}
    75  
    76  	return nil, nil
    77  }
    78  
    79  func validateID(nid, eid string) error {
    80  	if nid == "" {
    81  		return fmt.Errorf("invalid network id")
    82  	}
    83  	if eid == "" {
    84  		return fmt.Errorf("invalid endpoint id")
    85  	}
    86  	return nil
    87  }
    88  
    89  func (n *network) sandbox() osl.Sandbox {
    90  	n.Lock()
    91  	defer n.Unlock()
    92  
    93  	return n.sbox
    94  }
    95  
    96  func (n *network) setSandbox(sbox osl.Sandbox) {
    97  	n.Lock()
    98  	n.sbox = sbox
    99  	n.Unlock()
   100  }
   101  
   102  func (d *driver) getNetwork(id string) (*network, error) {
   103  	d.Lock()
   104  	defer d.Unlock()
   105  	if id == "" {
   106  		return nil, types.BadRequestErrorf("invalid network id: %s", id)
   107  	}
   108  	if nw, ok := d.networks[id]; ok {
   109  		return nw, nil
   110  	}
   111  
   112  	return nil, types.NotFoundErrorf("network not found: %s", id)
   113  }