blob: b6416ec02dc917ec27aa43178a22c59c1be7b7a8 [file]
package overlay
import (
"fmt"
"net/netip"
"github.com/gogo/protobuf/proto"
"github.com/moby/moby/v2/daemon/libnetwork/internal/hashable"
)
// OverlayPeerTable is the NetworkDB table for overlay network peer discovery.
const OverlayPeerTable = "overlay_peer_table"
type Peer struct {
EndpointIP netip.Prefix
EndpointMAC hashable.MACAddr
TunnelEndpointIP netip.Addr
}
func UnmarshalPeerRecord(data []byte) (*Peer, error) {
var pr PeerRecord
if err := proto.Unmarshal(data, &pr); err != nil {
return nil, fmt.Errorf("failed to unmarshal peer record: %w", err)
}
var (
p Peer
err error
)
p.EndpointIP, err = netip.ParsePrefix(pr.EndpointIP)
if err != nil {
return nil, fmt.Errorf("invalid peer IP %q received: %w", pr.EndpointIP, err)
}
p.EndpointMAC, err = hashable.ParseMAC(pr.EndpointMAC)
if err != nil {
return nil, fmt.Errorf("invalid MAC %q received: %w", pr.EndpointMAC, err)
}
p.TunnelEndpointIP, err = netip.ParseAddr(pr.TunnelEndpointIP)
if err != nil {
return nil, fmt.Errorf("invalid VTEP %q received: %w", pr.TunnelEndpointIP, err)
}
return &p, nil
}