2016-02-16 22:15:18 -05:00
|
|
|
package ipvlan
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
|
|
"github.com/docker/libnetwork/osl"
|
|
|
|
"github.com/docker/libnetwork/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (d *driver) network(nid string) *network {
|
|
|
|
d.Lock()
|
|
|
|
n, ok := d.networks[nid]
|
|
|
|
d.Unlock()
|
|
|
|
if !ok {
|
|
|
|
logrus.Errorf("network id %s not found", nid)
|
|
|
|
}
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) addNetwork(n *network) {
|
|
|
|
d.Lock()
|
|
|
|
d.networks[n.id] = n
|
|
|
|
d.Unlock()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) deleteNetwork(nid string) {
|
|
|
|
d.Lock()
|
|
|
|
delete(d.networks, nid)
|
|
|
|
d.Unlock()
|
|
|
|
}
|
|
|
|
|
|
|
|
// getNetworks Safely returns a slice of existng networks
|
|
|
|
func (d *driver) getNetworks() []*network {
|
|
|
|
d.Lock()
|
|
|
|
defer d.Unlock()
|
|
|
|
|
|
|
|
ls := make([]*network, 0, len(d.networks))
|
|
|
|
for _, nw := range d.networks {
|
|
|
|
ls = append(ls, nw)
|
|
|
|
}
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return ls
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *network) endpoint(eid string) *endpoint {
|
|
|
|
n.Lock()
|
|
|
|
defer n.Unlock()
|
|
|
|
|
|
|
|
return n.endpoints[eid]
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *network) addEndpoint(ep *endpoint) {
|
|
|
|
n.Lock()
|
|
|
|
n.endpoints[ep.id] = ep
|
|
|
|
n.Unlock()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *network) deleteEndpoint(eid string) {
|
|
|
|
n.Lock()
|
|
|
|
delete(n.endpoints, eid)
|
|
|
|
n.Unlock()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *network) getEndpoint(eid string) (*endpoint, error) {
|
|
|
|
n.Lock()
|
|
|
|
defer n.Unlock()
|
|
|
|
if eid == "" {
|
|
|
|
return nil, fmt.Errorf("endpoint id %s not found", eid)
|
|
|
|
}
|
|
|
|
if ep, ok := n.endpoints[eid]; ok {
|
|
|
|
return ep, nil
|
|
|
|
}
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func validateID(nid, eid string) error {
|
|
|
|
if nid == "" {
|
|
|
|
return fmt.Errorf("invalid network id")
|
|
|
|
}
|
|
|
|
if eid == "" {
|
|
|
|
return fmt.Errorf("invalid endpoint id")
|
|
|
|
}
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *network) sandbox() osl.Sandbox {
|
|
|
|
n.Lock()
|
|
|
|
defer n.Unlock()
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return n.sbox
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *network) setSandbox(sbox osl.Sandbox) {
|
|
|
|
n.Lock()
|
|
|
|
n.sbox = sbox
|
|
|
|
n.Unlock()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) getNetwork(id string) (*network, error) {
|
|
|
|
d.Lock()
|
|
|
|
defer d.Unlock()
|
|
|
|
if id == "" {
|
|
|
|
return nil, types.BadRequestErrorf("invalid network id: %s", id)
|
|
|
|
}
|
|
|
|
|
|
|
|
if nw, ok := d.networks[id]; ok {
|
|
|
|
return nw, nil
|
|
|
|
}
|
2016-03-02 20:13:15 -05:00
|
|
|
|
2016-02-16 22:15:18 -05:00
|
|
|
return nil, types.NotFoundErrorf("network not found: %s", id)
|
|
|
|
}
|