]> git.puffer.fish Git - matthieu/frr.git/commitdiff
eigrpd: Store nbr in packet data
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 17 Aug 2017 13:53:51 +0000 (09:53 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 17 Aug 2017 13:53:51 +0000 (09:53 -0400)
Store the neighbor information( if available ) in the packet
data that we are sending.  This will allow in a future commit
the ability to fixup the outgoing ack we are sending.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
eigrpd/eigrp_hello.c
eigrpd/eigrp_packet.c
eigrpd/eigrp_packet.h
eigrpd/eigrp_query.c
eigrpd/eigrp_reply.c
eigrpd/eigrp_siaquery.c
eigrpd/eigrp_siareply.c
eigrpd/eigrp_structs.h
eigrpd/eigrp_update.c

index b7c2f7f18d86a4570804b2bc3008e61d1e37ee41..4654ead4340b0e73f05bc4f1fd5edf83dc150d92 100644 (file)
@@ -614,7 +614,7 @@ static struct eigrp_packet *eigrp_hello_encode(struct eigrp_interface *ei,
        u_int16_t length = EIGRP_HEADER_LEN;
 
        // allocate a new packet to be sent
-       ep = eigrp_packet_new(ei->ifp->mtu);
+       ep = eigrp_packet_new(ei->ifp->mtu, NULL);
 
        if (ep) {
                // encode common header feilds
index dfc7463025d77a77b3a5b9a7f482b4a0f06a2bf6..84c1b1c59016c8fe65052c4047fb815c1ca0f2ad 100644 (file)
@@ -826,13 +826,14 @@ void eigrp_fifo_reset(struct eigrp_fifo *fifo)
        fifo->count = 0;
 }
 
-struct eigrp_packet *eigrp_packet_new(size_t size)
+struct eigrp_packet *eigrp_packet_new(size_t size, struct eigrp_neighbor *nbr)
 {
        struct eigrp_packet *new;
 
        new = XCALLOC(MTYPE_EIGRP_PACKET, sizeof(struct eigrp_packet));
        new->s = stream_new(size);
        new->retrans_counter = 0;
+       new->nbr = nbr;
 
        return new;
 }
@@ -1121,7 +1122,7 @@ struct eigrp_packet *eigrp_packet_duplicate(struct eigrp_packet *old,
 {
        struct eigrp_packet *new;
 
-       new = eigrp_packet_new(nbr->ei->ifp->mtu);
+       new = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
        new->length = old->length;
        new->retrans_counter = old->retrans_counter;
        new->dst = old->dst;
index 2f607e5cabbcadb182fdaaf879f2205ddb240636..890fc33c0f2003fe168121c063358a3a1e64ceab 100644 (file)
@@ -36,7 +36,7 @@
 extern int eigrp_read(struct thread *);
 extern int eigrp_write(struct thread *);
 
-extern struct eigrp_packet *eigrp_packet_new(size_t);
+extern struct eigrp_packet *eigrp_packet_new(size_t, struct eigrp_neighbor *);
 extern struct eigrp_packet *eigrp_packet_duplicate(struct eigrp_packet *,
                                                   struct eigrp_neighbor *);
 extern void eigrp_packet_free(struct eigrp_packet *);
index 653eae258f0dad296d830d7870162bf3b305b36d..92bc792c6aa80692d55a55c877fbd9f24febca35 100644 (file)
@@ -159,7 +159,7 @@ void eigrp_send_query(struct eigrp_interface *ei)
        char has_tlv;
        bool ep_saved = false;
 
-       ep = eigrp_packet_new(ei->ifp->mtu);
+       ep = eigrp_packet_new(ei->ifp->mtu, NULL);
 
        /* Prepare EIGRP INIT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_QUERY, ei, ep->s, 0,
index 4eb08c60d03bd98e448e69ad3fd12725ad2c4c14..c96c3008ca9677c34366831611328d891e15eee1 100644 (file)
@@ -114,7 +114,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
         * End of filtering
         */
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
 
        /* Prepare EIGRP INIT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_REPLY, nbr->ei, ep->s, 0,
index f16f49a3305ece827a967d3b6b44f9711ef99fef..a5df2381cabf929780ad66cb2a8e6242652b7397 100644 (file)
@@ -123,7 +123,7 @@ void eigrp_send_siaquery(struct eigrp_neighbor *nbr,
        struct eigrp_packet *ep;
        u_int16_t length = EIGRP_HEADER_LEN;
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
 
        /* Prepare EIGRP INIT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_SIAQUERY, nbr->ei, ep->s, 0,
index 9a768566d3f00b7d181150e241600f45edbddedb..0b684b498b0e8f21fb5983afa12866b4e897ea29 100644 (file)
@@ -122,7 +122,7 @@ void eigrp_send_siareply(struct eigrp_neighbor *nbr,
        struct eigrp_packet *ep;
        u_int16_t length = EIGRP_HEADER_LEN;
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
 
        /* Prepare EIGRP INIT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_SIAREPLY, nbr->ei, ep->s, 0,
index fd3e4b2014b352f8f591f7ad267091e6e693f1d6..0c15436d4fd0badeb9abe535755e84ede3a05a00 100644 (file)
@@ -311,6 +311,8 @@ struct eigrp_packet {
 
        /* EIGRP packet length. */
        u_int16_t length;
+
+       struct eigrp_neighbor *nbr;
 };
 
 struct eigrp_fifo {
index e0169c514b416a58bd09050188d4b444285943df..3c82fdfde8e997ce0018904cc93079969488be84 100644 (file)
@@ -463,7 +463,7 @@ void eigrp_update_send_init(struct eigrp_neighbor *nbr)
        struct eigrp_packet *ep;
        u_int16_t length = EIGRP_HEADER_LEN;
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
 
        /* Prepare EIGRP INIT UPDATE header */
        if (IS_DEBUG_EIGRP_PACKET(0, RECV))
@@ -546,7 +546,7 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
        struct prefix_ipv4 *dest_addr;
        u_int32_t seq_no = nbr->ei->eigrp->sequence_number;
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
 
        /* Prepare EIGRP EOT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_UPDATE, nbr->ei, ep->s, EIGRP_EOT_FLAG,
@@ -571,7 +571,7 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
                                seq_no++;
 
                                length = EIGRP_HEADER_LEN;
-                               ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+                               ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
                                eigrp_packet_header_init(EIGRP_OPC_UPDATE, nbr->ei, ep->s, EIGRP_EOT_FLAG,
                                                         seq_no, nbr->recv_sequence_number);
 
@@ -635,7 +635,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
 
        u_int16_t length = EIGRP_HEADER_LEN;
 
-       ep = eigrp_packet_new(ei->ifp->mtu);
+       ep = eigrp_packet_new(ei->ifp->mtu, NULL);
 
        /* Prepare EIGRP INIT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_UPDATE, ei, ep->s, 0,
@@ -835,7 +835,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
                }
        }
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu);
+       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
 
        /* Prepare EIGRP Graceful restart UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_UPDATE, nbr->ei, ep->s, flags,