1package macvlan
2
3import (
4	"fmt"
5
6	"github.com/docker/libnetwork/osl"
7	"github.com/docker/libnetwork/types"
8	"github.com/sirupsen/logrus"
9)
10
11func (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
22func (d *driver) addNetwork(n *network) {
23	d.Lock()
24	d.networks[n.id] = n
25	d.Unlock()
26}
27
28func (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
35func (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
47func (n *network) endpoint(eid string) *endpoint {
48	n.Lock()
49	defer n.Unlock()
50
51	return n.endpoints[eid]
52}
53
54func (n *network) addEndpoint(ep *endpoint) {
55	n.Lock()
56	n.endpoints[ep.id] = ep
57	n.Unlock()
58}
59
60func (n *network) deleteEndpoint(eid string) {
61	n.Lock()
62	delete(n.endpoints, eid)
63	n.Unlock()
64}
65
66func (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
79func 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
89func (n *network) sandbox() osl.Sandbox {
90	n.Lock()
91	defer n.Unlock()
92
93	return n.sbox
94}
95
96func (n *network) setSandbox(sbox osl.Sandbox) {
97	n.Lock()
98	n.sbox = sbox
99	n.Unlock()
100}
101
102func (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}
114