]> git.puffer.fish Git - matthieu/frr.git/commitdiff
vrrpd: merge keepalived packet header
authorQuentin Young <qlyoung@cumulusnetworks.com>
Thu, 6 Dec 2018 22:51:55 +0000 (22:51 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 17 May 2019 00:27:08 +0000 (00:27 +0000)
Pick up some smartness from keepalived.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
vrrpd/vrrp_packet.c
vrrpd/vrrp_packet.h

index 4cbcd771f225b74db2a2e25a12fc3831271c179f..a5eb40fda84a124601f3e1cb4ceb5a386f7a1da2 100644 (file)
@@ -35,16 +35,16 @@ struct vrrp_pkt *vrrp_pkt_build(uint8_t vrid, uint8_t prio,
        struct vrrp_pkt *pkt =
                XCALLOC(MTYPE_TMP, sizeof(struct vrrp_pkt) + addrsz * numip);
 
-       pkt->version = VRRP_VERSION;
-       pkt->type = VRRP_TYPE_ADVERTISEMENT;
-       pkt->vrid = vrid;
-       pkt->priority = prio;
-       pkt->rsvd = 0;
-       pkt->max_adver_int = max_adver_int;
+       pkt->hdr.version = VRRP_VERSION;
+       pkt->hdr.type = VRRP_TYPE_ADVERTISEMENT;
+       pkt->hdr.vrid = vrid;
+       pkt->hdr.priority = prio;
+       pkt->hdr.v3.rsvd = 0;
+       pkt->hdr.v3.adver_int = max_adver_int;
        for (uint8_t i = 0; i < numip; i++)
                memcpy(&pkt->addrs[i].v4, ips[i], addrsz);
        /* FIXME */
-       pkt->cksum = 0;
+       pkt->hdr.chksum = 0;
 
        return pkt;
 }
index 04116c624586cbd6c08eab8ea190b91e592f9fee..5ff08f95fe11a1baa7e425e84acb37d608fc9222 100644 (file)
 #define VRRP_VERSION 3
 #define VRRP_TYPE_ADVERTISEMENT 1
 
-struct vrrp_pkt {
+/*
+ * Shared header for VRRPv2/v3 packets.
+ */
+struct vrrp_hdr {
        uint8_t version : 4;
        uint8_t type : 4;
        uint8_t vrid;
        uint8_t priority;
-       uint8_t num_ip;
-       uint16_t rsvd : 4;
-       uint16_t max_adver_int : 12;
-       uint16_t cksum;
+       uint8_t naddr;
+       union {
+               struct {
+                       uint8_t auth_type;
+                       /* advertisement interval (in sec) */
+                       uint8_t adver_int;
+               } v2;
+               struct {
+                       /* advertisement interval (in centiseconds) */
+                       uint16_t rsvd : 4;
+                       uint16_t adver_int : 12;
+               } v3;
+       };
+       uint16_t chksum;
+};
+
+struct vrrp_pkt {
+       struct vrrp_hdr hdr;
        union {
                struct in_addr v4;
                struct in6_addr v6;