keepalived源码解析 —— vrrp_state_backup()

功能:
1、分析收到的 vrrp 包。若包分析返回结果:VRRP_PACKET_OK,则直接返回 false;
2、若未开启抢占模式(抢占模式只在 back 状态下有效) 或 对端 vrrp 优先级 >= 本端 vrrp 优先级,
则将对端 vrrp address 与优先级标记为为 master address 与优先级,同时本端 vrrp 继续保持 back 状态;
3、若开启了抢占模式 且 vrrp 通告的优先级 < 本端 vrrp 优先级,将本端 vrrp address 记录为 master address。

/* BACKUP state processing */
void
vrrp_state_backup(vrrp_t *vrrp, const vrrphdr_t *hd, const char *buf, ssize_t buflen)
{
   
	ssize_t ret = 0;
	unsigned master_adver_int;
	bool check_addr = false;
	timeval_t new_ms_down_timer;
	bool ignore_advert = false;

	/* Process the incoming packet */
	if (!vrrp->skip_check_adv_addr ||
	    vrrp->master_saddr.ss_family != vrrp->pkt_saddr.ss_family)
		check_addr = true;
	else {
   
		/* Check if the addresses are different */
		if (vrrp->pkt_saddr.ss_family == AF_INET) {
   
			if (((struct sockaddr_in*)&vrrp->pkt_saddr)->sin_addr.s_addr != ((struct sockaddr_in*)&vrrp->master_saddr)->sin_addr.s_addr)
				check_addr = true ;
		} else {
   
			if (!IN6_ARE_ADDR_EQUAL(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值