Documentation
¶
Index ¶
- Constants
- Variables
- func SetDefaultLogger(l *log.Logger)
- type AddrAnnouncer
- type EVENT
- type IPv4AddrAnnouncer
- type IPv4VRRPMsgCon
- type IPv6AddrAnnouncer
- type IPv6VRRPMsgCon
- type NetErr
- type PseudoHeader
- type VRRPMsgConnection
- type VRRPPacket
- func (packet *VRRPPacket) AddIPAddr(ip netip.Addr)
- func (packet *VRRPPacket) AddIPvXAddr(version byte, ip net.IP)
- func (packet *VRRPPacket) GetAdvertisementInterval() uint16
- func (packet *VRRPPacket) GetCheckSum() uint16
- func (packet *VRRPPacket) GetIPvXAddr(version byte) (addrs []net.IP)
- func (packet *VRRPPacket) GetIPvXAddrCount() byte
- func (packet *VRRPPacket) GetPriority() byte
- func (packet *VRRPPacket) GetType() byte
- func (packet *VRRPPacket) GetVersion() byte
- func (packet *VRRPPacket) GetVirtualRouterID() byte
- func (packet *VRRPPacket) PacketSize() int
- func (packet *VRRPPacket) SetAdvertisementInterval(interval uint16)
- func (packet *VRRPPacket) SetCheckSum(pshdr *PseudoHeader)
- func (packet *VRRPPacket) SetPriority(Priority byte)
- func (packet *VRRPPacket) SetType()
- func (packet *VRRPPacket) SetVersion(Version VRRPVersion)
- func (packet *VRRPPacket) SetVirtualRouterID(VirtualRouterID byte)
- func (packet *VRRPPacket) String() string
- func (packet *VRRPPacket) ToBytes() []byte
- func (packet *VRRPPacket) ValidateCheckSum(pshdr *PseudoHeader) bool
- type VRRPVersion
- type VirtualRouter
- func (r *VirtualRouter) AddEventListener(typ transition, handler func(*VirtualRouter)) bool
- func (r *VirtualRouter) AddIPvXAddr(ip net.IP)
- func (r *VirtualRouter) GetAdvInterval() time.Duration
- func (r *VirtualRouter) GetInterface() *net.Interface
- func (r *VirtualRouter) GetPreempt() bool
- func (r *VirtualRouter) GetPreferredSourceIP() net.IP
- func (r *VirtualRouter) GetPriority() byte
- func (r *VirtualRouter) GetState() uint32
- func (r *VirtualRouter) GetVIPs() []net.IP
- func (r *VirtualRouter) RemoveIPvXAddr(ip net.IP)
- func (r *VirtualRouter) SetAdvInterval(Interval time.Duration) *VirtualRouter
- func (r *VirtualRouter) SetPreemptMode(flag bool) *VirtualRouter
- func (r *VirtualRouter) SetPriorityAndMasterAdvInterval(priority byte, interval time.Duration) *VirtualRouter
- func (r *VirtualRouter) Start()
- func (r *VirtualRouter) Stop()
- func (r *VirtualRouter) VRID() byte
Constants ¶
const ( IPv4 byte = 4 IPv6 byte = 6 )
const ( INIT uint32 = 0 MASTER uint32 = 1 BACKUP uint32 = 2 )
const ( VRRPMultiTTL = 255 VRRPIPProtocolNumber = 112 // IANA为VRRP分配的IPv4协议号为 112(十进制)。 )
const ( Master2Backup transition = iota Backup2Master Init2Master Init2Backup Master2Init Backup2Init )
const EVENT_CHANNEL_SIZE = 1
const PACKET_QUEUE_SIZE = 512
Variables ¶
var BroadcastHADAR, _ = net.ParseMAC("ff:ff:ff:ff:ff:ff")
广播地址
var VRRPMultiAddrIPv4 = net.IPv4(224, 0, 0, 18)
VRRPMultiAddrIPv4 VRRP协议多播IPv4地址 (RFC5798 5.1.1.2) IANA为VRRP分配的IPv4多播地址为: 224.0.0.18
var VRRPMultiAddrIPv6 = net.ParseIP("FF02:0:0:0:0:0:0:12")
VRRPMultiAddrIPv6 VRRP协议多播IPv6地址 (RFC5798 5.1.2.2) IANA为VRRP分配的IPv6多播地址为 FF02:0:0:0:0:0:0:12
Functions ¶
func SetDefaultLogger ¶ added in v1.0.2
SetDefaultLogger 设置默认日志记录器
Types ¶
type AddrAnnouncer ¶
type AddrAnnouncer interface { io.Closer AnnounceAll(vr *VirtualRouter) error }
type IPv4AddrAnnouncer ¶
IPv4AddrAnnouncer IPv4 Gratuitous ARP广播,在指定网口上广播Gratuitous ARP消息通知其他主机VIP地址
func NewIPv4AddrAnnouncer ¶
func NewIPv4AddrAnnouncer(nif *net.Interface) (*IPv4AddrAnnouncer, error)
NewIPv4AddrAnnouncer 创建IPv4 Gratuitous ARP广播
func (*IPv4AddrAnnouncer) AnnounceAll ¶
func (ar *IPv4AddrAnnouncer) AnnounceAll(vr *VirtualRouter) error
AnnounceAll 广播 gratuitous ARP response 包含所有的IPv4虚拟IP地址
func (*IPv4AddrAnnouncer) Close ¶ added in v1.0.8
func (ar *IPv4AddrAnnouncer) Close() error
type IPv4VRRPMsgCon ¶ added in v1.0.1
type IPv4VRRPMsgCon struct {
// contains filtered or unexported fields
}
IPv4VRRPMsgCon IPv4的VRRP消息组播连接
func (*IPv4VRRPMsgCon) Close ¶ added in v1.0.8
func (conn *IPv4VRRPMsgCon) Close() error
func (*IPv4VRRPMsgCon) ReadMessage ¶ added in v1.0.1
func (conn *IPv4VRRPMsgCon) ReadMessage() (*VRRPPacket, error)
ReadMessage 读取VRRP数据包
func (*IPv4VRRPMsgCon) WriteMessage ¶ added in v1.0.1
func (conn *IPv4VRRPMsgCon) WriteMessage(packet *VRRPPacket) error
WriteMessage 发送VRRP数据包
type IPv6AddrAnnouncer ¶
type IPv6AddrAnnouncer struct {
// contains filtered or unexported fields
}
IPv6AddrAnnouncer IPv6 NDP广播,在指定网口上广播NDP消息通知其他主机VIP地址
func NewIPIPv6AddrAnnouncer ¶
func NewIPIPv6AddrAnnouncer(nif *net.Interface) (*IPv6AddrAnnouncer, error)
NewIPIPv6AddrAnnouncer 创建IPv6 NDP广播
func (*IPv6AddrAnnouncer) AnnounceAll ¶
func (nd *IPv6AddrAnnouncer) AnnounceAll(vr *VirtualRouter) error
AnnounceAll 广播 包含所有的IPv6虚拟IP地址
func (*IPv6AddrAnnouncer) Close ¶ added in v1.0.8
func (nd *IPv6AddrAnnouncer) Close() error
type IPv6VRRPMsgCon ¶ added in v1.0.1
type IPv6VRRPMsgCon struct {
// contains filtered or unexported fields
}
IPv6VRRPMsgCon IPv6的VRRP消息组播连接
func (*IPv6VRRPMsgCon) Close ¶ added in v1.0.8
func (con *IPv6VRRPMsgCon) Close() error
func (*IPv6VRRPMsgCon) ReadMessage ¶ added in v1.0.1
func (con *IPv6VRRPMsgCon) ReadMessage() (*VRRPPacket, error)
ReadMessage 读取VRRP数据包
func (*IPv6VRRPMsgCon) WriteMessage ¶ added in v1.0.1
func (con *IPv6VRRPMsgCon) WriteMessage(packet *VRRPPacket) error
WriteMessage 发送VRRP数据包
type NetErr ¶ added in v1.0.13
type NetErr struct {
// contains filtered or unexported fields
}
NetErr 网络异常
type PseudoHeader ¶
type PseudoHeader struct { Saddr net.IP // 源地址 Daddr net.IP // 目的地址 Zero uint8 Protocol uint8 // IP层协议号 VRRP为 112(十进制) Len uint16 // VRRP报文总长 }
PseudoHeader 伪头部,用于记录IP层协议信息
type VRRPMsgConnection ¶ added in v1.0.1
type VRRPMsgConnection interface { io.Closer // WriteMessage 发送VRRP消息 WriteMessage(*VRRPPacket) error // ReadMessage 接收VRRP消息 ReadMessage() (*VRRPPacket, error) }
VRRPMsgConnection IP层VRRP协议消息接口
func NewIPv4VRRPMsgConn ¶ added in v1.0.1
NewIPv4VRRPMsgConn 创建的IPv4 VRRP虚拟连接 ift: 工作网口 src: IP数据包中源地址,应该为工作网口的IP地址 dst: IP数据包中目的地址,应该为组播地址 VRRPMultiAddrIPv4
func NewIPv6VRRPMsgCon ¶ added in v1.0.1
NewIPv6VRRPMsgCon 创建的IPv6 VRRP虚拟连接
type VRRPPacket ¶
type VRRPPacket struct { Header [8]byte // 头部 IPAddress [][4]byte // 报文中IP地址序列 Pshdr *PseudoHeader // 伪头部,用于记录IP层信息 }
VRRPPacket VRRP数据包
func FromBytes ¶
func FromBytes(IPvXVersion byte, octets []byte) (*VRRPPacket, error)
FromBytes 解析VRRP数据包
func (*VRRPPacket) AddIPAddr ¶
func (packet *VRRPPacket) AddIPAddr(ip netip.Addr)
AddIPAddr 向报文中追加IP
func (*VRRPPacket) AddIPvXAddr ¶
func (packet *VRRPPacket) AddIPvXAddr(version byte, ip net.IP)
AddIPvXAddr 向报文中追加IP
func (*VRRPPacket) GetAdvertisementInterval ¶
func (packet *VRRPPacket) GetAdvertisementInterval() uint16
GetAdvertisementInterval 获取 最大播发间隔 12-bit的字段,用于表示2条VRRP消息发送的间隔时间,单位为 厘秒, 100 厘秒 = 1 秒。
func (*VRRPPacket) GetCheckSum ¶
func (packet *VRRPPacket) GetCheckSum() uint16
GetCheckSum 获取 校验和 用于检测VRRP消息中的数据损坏。
func (*VRRPPacket) GetIPvXAddr ¶
func (packet *VRRPPacket) GetIPvXAddr(version byte) (addrs []net.IP)
GetIPvXAddr 获取报文中的IP
func (*VRRPPacket) GetIPvXAddrCount ¶
func (packet *VRRPPacket) GetIPvXAddrCount() byte
GetIPvXAddrCount 获取 报文中的IP数量,至少为1
func (*VRRPPacket) GetVirtualRouterID ¶
func (packet *VRRPPacket) GetVirtualRouterID() byte
GetVirtualRouterID 获取 虚拟路由ID
func (*VRRPPacket) PacketSize ¶ added in v1.0.1
func (packet *VRRPPacket) PacketSize() int
PacketSize 当前报文的长度
func (*VRRPPacket) SetAdvertisementInterval ¶
func (packet *VRRPPacket) SetAdvertisementInterval(interval uint16)
SetAdvertisementInterval 设置 最大播发间隔,单位厘秒, 100 厘秒 = 1 秒。
func (*VRRPPacket) SetCheckSum ¶
func (packet *VRRPPacket) SetCheckSum(pshdr *PseudoHeader)
SetCheckSum 设置 校验和 校验和需要 伪头部 与 报文内容 进行计算,计算方式见 RFC1071
pshdr: 伪头部
func (*VRRPPacket) SetPriority ¶
func (packet *VRRPPacket) SetPriority(Priority byte)
SetPriority 设置 优先级 0~255 最高优先
拥有与虚拟路由器关联的IPvX地址的VRRP路由器的优先级值必须为255(十进制)。
备份虚拟路由器的VRRP路由器必须使用1-254(十进制)之间的优先级值。备份虚拟路由器的VRRP路由器的默认优先级为 100 (十进制) 。
优先级值0具有特殊意义,表示当前主机已停止参与VRRP。这用于触发备份路由器快速过渡到主路由器,而无需等待当前主路由器超时。
func (*VRRPPacket) SetType ¶
func (packet *VRRPPacket) SetType()
SetType 设置 VRRP数据包的类型,固定值 1 ADVERTISEMENT
func (*VRRPPacket) SetVersion ¶
func (packet *VRRPPacket) SetVersion(Version VRRPVersion)
SetVersion 设置 VRRP协议版本号
func (*VRRPPacket) SetVirtualRouterID ¶
func (packet *VRRPPacket) SetVirtualRouterID(VirtualRouterID byte)
SetVirtualRouterID 设置 虚拟路由ID
func (*VRRPPacket) String ¶ added in v1.0.1
func (packet *VRRPPacket) String() string
func (*VRRPPacket) ValidateCheckSum ¶
func (packet *VRRPPacket) ValidateCheckSum(pshdr *PseudoHeader) bool
ValidateCheckSum 验证 校验和
type VRRPVersion ¶
type VRRPVersion byte
const ( VRRPv1 VRRPVersion = 1 VRRPv2 VRRPVersion = 2 VRRPv3 VRRPVersion = 3 )
func (VRRPVersion) String ¶
func (v VRRPVersion) String() string
type VirtualRouter ¶
type VirtualRouter struct {
// contains filtered or unexported fields
}
VirtualRouter 虚拟路由器,实现了VRRP协议的状态机
func NewVirtualRouter ¶
NewVirtualRouter 创建虚拟路由器 VRID: 虚拟路由ID (0~255) nif: 工作网口接口名称 Owner: 是否为MASTER IPvX: IP协议类型(IPv4 或 IPv6)
func NewVirtualRouterSpec ¶ added in v1.0.3
func NewVirtualRouterSpec(VRID byte, ift *net.Interface, preferIP net.IP, priority byte) (*VirtualRouter, error)
NewVirtualRouterSpec 创建一个虚拟路由器实例 VRID: 虚拟路由ID ift: 工作网口接口 preferIP: 优先使用的源IP地址,请确保工作网口配置由该IP地址保持一致。 priority: 优先级,255 表示主节点,0 为特殊值不可使用,默认100。
func (*VirtualRouter) AddEventListener ¶ added in v1.0.1
func (r *VirtualRouter) AddEventListener(typ transition, handler func(*VirtualRouter)) bool
AddEventListener 添加状态机事件监听器 typ: 状态变更类型 handler: 状态变更时的回调函数
return: 如果已经存在该类型的监听器,那么返回 true,否则返回 false
func (*VirtualRouter) AddIPvXAddr ¶
func (r *VirtualRouter) AddIPvXAddr(ip net.IP)
AddIPvXAddr 添加虚拟IP
func (*VirtualRouter) GetAdvInterval ¶ added in v1.0.3
func (r *VirtualRouter) GetAdvInterval() time.Duration
GetAdvInterval 获取 虚拟路由的心跳发送间隔
func (*VirtualRouter) GetInterface ¶ added in v1.0.3
func (r *VirtualRouter) GetInterface() *net.Interface
GetInterface 获取 虚拟路由的工作网口
func (*VirtualRouter) GetPreempt ¶ added in v1.0.3
func (r *VirtualRouter) GetPreempt() bool
GetPreempt 获取 虚拟路由的抢占模式
func (*VirtualRouter) GetPreferredSourceIP ¶ added in v1.0.3
func (r *VirtualRouter) GetPreferredSourceIP() net.IP
GetPreferredSourceIP 获取 虚拟路由的优先IP地址
func (*VirtualRouter) GetPriority ¶ added in v1.0.3
func (r *VirtualRouter) GetPriority() byte
GetPriority 获取 虚拟路由的优先级
func (*VirtualRouter) GetState ¶ added in v1.0.3
func (r *VirtualRouter) GetState() uint32
GetState 获取 虚拟路由的状态 return INIT | MASTER | BACKUP
func (*VirtualRouter) GetVIPs ¶ added in v1.0.3
func (r *VirtualRouter) GetVIPs() []net.IP
GetVIPs 获取 虚拟路由的保护IP地址
func (*VirtualRouter) RemoveIPvXAddr ¶
func (r *VirtualRouter) RemoveIPvXAddr(ip net.IP)
RemoveIPvXAddr 移除 虚拟路由的虚拟IP地址
func (*VirtualRouter) SetAdvInterval ¶
func (r *VirtualRouter) SetAdvInterval(Interval time.Duration) *VirtualRouter
SetAdvInterval 设置 VRRP消息发送间隔(心跳间隔),时间间隔不能小于 10 ms。
func (*VirtualRouter) SetPreemptMode ¶
func (r *VirtualRouter) SetPreemptMode(flag bool) *VirtualRouter
SetPreemptMode 设置 抢占模式 高优先级备份路由器是否抢占低优先级主路由器。 值为 true 表示 允许抢占,值为 false 表示 禁止抢占。默认值为 true。
func (*VirtualRouter) SetPriorityAndMasterAdvInterval ¶
func (r *VirtualRouter) SetPriorityAndMasterAdvInterval(priority byte, interval time.Duration) *VirtualRouter
SetPriorityAndMasterAdvInterval 设置 当前虚拟路由优先级 以及 心跳发送间隔
func (*VirtualRouter) Start ¶ added in v1.0.1
func (r *VirtualRouter) Start()
Start 启动虚拟路由器 虚拟路由器启动后,将开始监听VRRP消息,根据状态机的状态,切换至不同的状态。