mirror of
https://github.com/moby/moby.git
synced 2026-08-03 22:51:03 +00:00
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
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
|
|
}
|