1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package alloc
- import (
- "fmt"
- "net"
- "github.com/coreos/rudder/backend"
- "github.com/coreos/rudder/pkg/ip"
- "github.com/coreos/rudder/pkg/task"
- "github.com/coreos/rudder/subnet"
- )
- type AllocBackend struct {
- sm *subnet.SubnetManager
- stop chan bool
- }
- func New(sm *subnet.SubnetManager) backend.Backend {
- return &AllocBackend{
- sm: sm,
- stop: make(chan bool),
- }
- }
- func (m *AllocBackend) Init(extIface *net.Interface, extIP net.IP, ipMasq bool) (ip.IP4Net, int, error) {
- attrs := subnet.BaseAttrs{
- PublicIP: ip.FromIP(extIP),
- }
- sn, err := m.sm.AcquireLease(ip.FromIP(extIP), &attrs, m.stop)
- if err != nil {
- if err == task.ErrCanceled {
- return ip.IP4Net{}, 0, err
- } else {
- return ip.IP4Net{}, 0, fmt.Errorf("Failed to acquire lease: %v", err)
- }
- }
- return sn, extIface.MTU, nil
- }
- func (m *AllocBackend) Run() {
- m.sm.LeaseRenewer(m.stop)
- }
- func (m *AllocBackend) Stop() {
- close(m.stop)
- }
- func (m *AllocBackend) Name() string {
- return "allocation"
- }
|