shutdown fix

This commit is contained in:
ston1th 2021-09-26 21:31:05 +02:00
commit 279fba0c57
4 changed files with 39 additions and 11 deletions

View file

@ -2,8 +2,10 @@ package vip
import (
"errors"
"github.com/vishvananda/netlink"
"net"
"sync"
"github.com/vishvananda/netlink"
)
var ErrNoDefaultInterface = errors.New("no default interface found")
@ -25,6 +27,8 @@ func DefaultInterface() (iface string, err error) {
}
type Network struct {
sync.Mutex
m map[string]struct{}
iface string
label string
link netlink.Link
@ -45,7 +49,12 @@ func NewNetworkWithLabel(iface, label string) (n *Network, err error) {
if err != nil {
return
}
n = &Network{iface, label, link}
n = &Network{
m: make(map[string]struct{}),
iface: iface,
label: label,
link: link,
}
return
}
@ -67,6 +76,8 @@ func (n *Network) HasIP(a *netlink.Addr) bool {
}
func (n *Network) AddIP(cidr string) error {
n.Lock()
defer n.Unlock()
addr, err := netlink.ParseAddr(cidr)
if err != nil {
return err
@ -81,10 +92,13 @@ func (n *Network) AddIP(cidr string) error {
if err != nil {
return err
}
n.m[cidr] = struct{}{}
return ARPSendGratuitous(cidr, n.iface)
}
func (n *Network) DeleteIP(cidr string) error {
n.Lock()
defer n.Unlock()
addr, err := netlink.ParseAddr(cidr)
if err != nil {
return err
@ -92,5 +106,22 @@ func (n *Network) DeleteIP(cidr string) error {
if !n.HasIP(addr) {
return nil
}
return netlink.AddrDel(n.link, addr)
err = netlink.AddrDel(n.link, addr)
if err != nil {
return err
}
delete(n.m, cidr)
return nil
}
func (n *Network) GetIPs() (cidrs []string) {
n.Lock()
defer n.Unlock()
cidrs = make([]string, len(n.m))
c := 0
for k := range n.m {
cidrs[c] = k
c++
}
return
}