]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib, zebra: Fix last write command written
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 11 Oct 2019 12:56:39 +0000 (08:56 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 15 Oct 2019 18:54:35 +0000 (14:54 -0400)
With commit: a9ff90c41b0a95195d19d451ee83eb460e1599d0
the vrf_id_t was changed from a uint16_t to a uint32_t

Zebra tracked the last command sent to it's peer via peeking
into the data it was sending to each client ( since we had
lost the idea of what the command was when it was time to track
the data ).

Add a define to track this and add a bit of verbiage
to the code to allow us to notice when we screw with
the header again so that this is just fixed correctly
when it happens again.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/zclient.c
lib/zclient.h
zebra/zserv.c

index 91dbe30a09f08c99baa829192013171c549fc0ee..a135d18744002bf84ca72417f1971da10f17cf7c 100644 (file)
@@ -293,6 +293,10 @@ int zclient_send_message(struct zclient *zclient)
        return 0;
 }
 
+/*
+ * If we add more data to this structure please ensure that
+ * struct zmsghdr in lib/zclient.h is updated as appropriate.
+ */
 void zclient_create_header(struct stream *s, uint16_t command, vrf_id_t vrf_id)
 {
        /* length placeholder, caller can update */
index 5f9edc36ffc7120e1a8535af0d06437765cba3b8..2131d4d47a7de18cfb8b6559a69103786c8c8590 100644 (file)
@@ -298,7 +298,8 @@ struct zmsghdr {
        uint8_t version;
        vrf_id_t vrf_id;
        uint16_t command;
-};
+} __attribute__((packed));
+#define ZAPI_HEADER_CMD_LOCATION offsetof(struct zmsghdr, command)
 
 struct zapi_nexthop {
        enum nexthop_types_t type;
index c008441d6abad57c7d782e1438c2ca5149cac1d9..b0991e98f893cf0c3fd716f8978ab046052a7b78 100644 (file)
@@ -240,7 +240,7 @@ static int zserv_write(struct thread *thread)
        if (cache->tail) {
                msg = cache->tail;
                stream_set_getp(msg, 0);
-               wcmd = stream_getw_from(msg, 6);
+               wcmd = stream_getw_from(msg, ZAPI_HEADER_CMD_LOCATION);
        }
 
        while (stream_fifo_head(cache)) {