Keepalivedを使っていると、たまに

Jan  6 15:11:03 aplvs2 Keepalived_vrrp: bogus VRRP packet received on eth1 !!!
Jan  6 15:11:03 aplvs2 Keepalived_vrrp: VRRP_Instance(VI_1) ignoring received advertisment...
Jan  6 15:11:04 aplvs2 Keepalived_vrrp: receive an invalid ip number count associated with VRID!
Jan  6 15:11:04 aplvs2 Keepalived_vrrp: bogus VRRP packet received on eth1 !!!
Jan  6 15:11:04 aplvs2 Keepalived_vrrp: VRRP_Instance(VI_1) ignoring received advertisment...

というエラーメッセージがログに残っているので気持ち悪い.

Web上でも同様のエラーメッセージについての質問が出ているのだけど、大抵話が大きくなっていくのでちょっと違いかなぁ、と.

面倒なので、VRRPのパケットの仕様を横目で見つつソースコードを眺めてみた.

    if (!LIST_ISEMPTY(vrrp->vip)) {
        /*
         * MAY verify that the IP address(es) associated with the
         * VRID are valid
         */
        if (hd->naddr != LIST_SIZE(vrrp->vip)) {
            log_message(LOG_INFO,
                   "receive an invalid ip number count associated with VRID!");
            return VRRP_PACKET_KO;
        }

        for (e = LIST_HEAD(vrrp->vip); e; ELEMENT_NEXT(e)) {
            ipaddress = ELEMENT_DATA(e);
            if (!vrrp_in_chk_vips(vrrp, ipaddress->addr, vips)) {
                log_message(LOG_INFO, "ip address associated with VRID"
                       " not present in received packet : %d",
                       ipaddress->addr);
                log_message(LOG_INFO,
                       "one or more VIP associated with"
                       " VRID mismatch actual MASTER advert");
                return VRRP_PACKET_KO;
            }
        }
    } else if (hd->naddr > 0) {
        log_message(LOG_INFO,
               "receive an invalid ip number count associated with VRID!");
        return VRRP_PACKET_KO;
    }

何となくMasterから受信した仮想IPアドレスの設定数が自分のものと異なると出力されるのかなぁ、と推測.

Master - Backup間の設定をずらしたり合わせたりすると、エラーメッセージが出たり消えたりしたのでそれっぽい.