功能:
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(