]> git.proxmox.com Git - mirror_frr.git/blobdiff - eigrpd/eigrp_update.c
zebra: Allow ns delete to happen after under/over flow checks
[mirror_frr.git] / eigrpd / eigrp_update.c
index baaf7f6891a94b9436d5b37d456d63cb0ed0efb7..8db4903077f466ca404ec65874dc1995256829bf 100644 (file)
@@ -176,13 +176,13 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
        struct TLV_IPv4_Internal_type *tlv;
        struct eigrp_prefix_entry *pe;
        struct eigrp_nexthop_entry *ne;
-       u_int32_t flags;
-       u_int16_t type;
-       u_int16_t length;
-       u_char same;
+       uint32_t flags;
+       uint16_t type;
+       uint16_t length;
+       uint8_t same;
        struct prefix dest_addr;
-       u_char graceful_restart;
-       u_char graceful_restart_final;
+       uint8_t graceful_restart;
+       uint8_t graceful_restart_final;
        struct list *nbr_prefixes = NULL;
 
        /* increment statistics. */
@@ -297,7 +297,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
                type = stream_getw(s);
                switch (type) {
                case EIGRP_TLV_IPv4_INT:
-                       stream_set_getp(s, s->getp - sizeof(u_int16_t));
+                       stream_set_getp(s, s->getp - sizeof(uint16_t));
 
                        tlv = eigrp_read_ipv4_tlv(s);
 
@@ -411,16 +411,16 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
        eigrp_update_send_all(eigrp, ei);
 
        if (nbr_prefixes)
-               list_delete_and_null(&nbr_prefixes);
+               list_delete(&nbr_prefixes);
 }
 
 /*send EIGRP Update packet*/
 void eigrp_update_send_init(struct eigrp_neighbor *nbr)
 {
        struct eigrp_packet *ep;
-       u_int16_t length = EIGRP_HEADER_LEN;
+       uint16_t length = EIGRP_HEADER_LEN;
 
-       ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
+       ep = eigrp_packet_new(EIGRP_PACKET_MTU(nbr->ei->ifp->mtu), nbr);
 
        /* Prepare EIGRP INIT UPDATE header */
        if (IS_DEBUG_EIGRP_PACKET(0, RECV))
@@ -463,7 +463,7 @@ void eigrp_update_send_init(struct eigrp_neighbor *nbr)
 
 static void eigrp_update_place_on_nbr_queue(struct eigrp_neighbor *nbr,
                                            struct eigrp_packet *ep,
-                                           u_int32_t seq_no, int length)
+                                           uint32_t seq_no, int length)
 {
        if ((nbr->ei->params.auth_type == EIGRP_AUTH_TYPE_MD5)
            && (nbr->ei->params.auth_keychain != NULL)) {
@@ -525,18 +525,18 @@ static void eigrp_update_send_to_all_nbrs(struct eigrp_interface *ei,
 void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
 {
        struct eigrp_packet *ep;
-       u_int16_t length = EIGRP_HEADER_LEN;
+       uint16_t length = EIGRP_HEADER_LEN;
        struct eigrp_nexthop_entry *te;
        struct eigrp_prefix_entry *pe;
        struct listnode *node2, *nnode2;
        struct eigrp_interface *ei = nbr->ei;
        struct eigrp *eigrp = ei->eigrp;
        struct prefix *dest_addr;
-       u_int32_t seq_no = eigrp->sequence_number;
-       u_int16_t mtu = ei->ifp->mtu;
+       uint32_t seq_no = eigrp->sequence_number;
+       uint16_t eigrp_mtu = EIGRP_PACKET_MTU(ei->ifp->mtu);
        struct route_node *rn;
 
-       ep = eigrp_packet_new(mtu, nbr);
+       ep = eigrp_packet_new(eigrp_mtu, nbr);
 
        /* Prepare EIGRP EOT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_UPDATE, eigrp, ep->s, EIGRP_EOT_FLAG,
@@ -557,13 +557,13 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
                        if (eigrp_nbr_split_horizon_check(te, ei))
                                continue;
 
-                       if ((length + EIGRP_TLV_MAX_IPV4_BYTE) > mtu) {
+                       if ((length + EIGRP_TLV_MAX_IPV4_BYTE) > eigrp_mtu) {
                                eigrp_update_place_on_nbr_queue(nbr, ep, seq_no,
                                                                length);
                                seq_no++;
 
                                length = EIGRP_HEADER_LEN;
-                               ep = eigrp_packet_new(mtu, nbr);
+                               ep = eigrp_packet_new(eigrp_mtu, nbr);
                                eigrp_packet_header_init(
                                        EIGRP_OPC_UPDATE, nbr->ei->eigrp, ep->s,
                                        EIGRP_EOT_FLAG, seq_no,
@@ -600,17 +600,18 @@ void eigrp_update_send(struct eigrp_interface *ei)
        struct eigrp_packet *ep;
        struct listnode *node, *nnode;
        struct eigrp_prefix_entry *pe;
-       u_char has_tlv;
+       uint8_t has_tlv;
        struct eigrp *eigrp = ei->eigrp;
        struct prefix *dest_addr;
-       u_int32_t seq_no = eigrp->sequence_number;
+       uint32_t seq_no = eigrp->sequence_number;
+       uint16_t eigrp_mtu = EIGRP_PACKET_MTU(ei->ifp->mtu);
 
        if (ei->nbrs->count == 0)
                return;
 
-       u_int16_t length = EIGRP_HEADER_LEN;
+       uint16_t length = EIGRP_HEADER_LEN;
 
-       ep = eigrp_packet_new(ei->ifp->mtu, NULL);
+       ep = eigrp_packet_new(eigrp_mtu, NULL);
 
        /* Prepare EIGRP INIT UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_UPDATE, eigrp, ep->s, 0, seq_no, 0);
@@ -633,8 +634,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
                if (eigrp_nbr_split_horizon_check(ne, ei))
                        continue;
 
-               if ((length + EIGRP_TLV_MAX_IPV4_BYTE)
-                   > (u_int16_t)ei->ifp->mtu) {
+               if ((length + EIGRP_TLV_MAX_IPV4_BYTE) > eigrp_mtu) {
                        if ((ei->params.auth_type == EIGRP_AUTH_TYPE_MD5)
                            && (ei->params.auth_keychain != NULL)) {
                                eigrp_make_md5_digest(ei, ep->s,
@@ -651,7 +651,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
                        eigrp_update_send_to_all_nbrs(ei, ep);
 
                        length = EIGRP_HEADER_LEN;
-                       ep = eigrp_packet_new(ei->ifp->mtu, NULL);
+                       ep = eigrp_packet_new(eigrp_mtu, NULL);
                        eigrp_packet_header_init(EIGRP_OPC_UPDATE, eigrp, ep->s,
                                                 0, seq_no, 0);
                        if ((ei->params.auth_type == EIGRP_AUTH_TYPE_MD5)
@@ -743,13 +743,13 @@ void eigrp_update_send_all(struct eigrp *eigrp,
 static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
 {
        struct eigrp_packet *ep;
-       u_int16_t length = EIGRP_HEADER_LEN;
+       uint16_t length = EIGRP_HEADER_LEN;
        struct eigrp_prefix_entry *pe;
        struct prefix *dest_addr;
        struct eigrp_interface *ei = nbr->ei;
        struct eigrp *eigrp = ei->eigrp;
        struct list *prefixes;
-       u_int32_t flags;
+       uint32_t flags;
        unsigned int send_prefixes;
        struct route_node *rn;
 
@@ -757,7 +757,6 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
        prefixes = nbr->nbr_gr_prefixes_send;
 
        send_prefixes = 0;
-       length = EIGRP_HEADER_LEN;
 
        /* if there already were last packet chunk, we won't continue */
        if (nbr->nbr_gr_packet_type == EIGRP_PACKET_PART_LAST)
@@ -790,7 +789,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
                }
        }
 
-       ep = eigrp_packet_new(ei->ifp->mtu, nbr);
+       ep = eigrp_packet_new(EIGRP_PACKET_MTU(ei->ifp->mtu), nbr);
 
        /* Prepare EIGRP Graceful restart UPDATE header */
        eigrp_packet_header_init(EIGRP_OPC_UPDATE, eigrp, ep->s, flags,