diff --git a/eigrpd/eigrp_fsm.c b/eigrpd/eigrp_fsm.c index 8e2a26447e..ba2d1f7e8d 100644 --- a/eigrpd/eigrp_fsm.c +++ b/eigrpd/eigrp_fsm.c @@ -333,7 +333,7 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) */ int eigrp_fsm_event(struct eigrp_fsm_action_message *msg, int event) { - zlog_info("EIGRP AS: %d State: %d Event: %d Network: %s\n", + zlog_info("EIGRP AS: %d State: %d Event: %d Network: %s", msg->eigrp->AS, msg->prefix->state, event, eigrp_topology_ip_string(msg->prefix)); (*(NSM[msg->prefix->state][event].func))(msg); diff --git a/eigrpd/eigrp_hello.c b/eigrpd/eigrp_hello.c index b7c2f7f18d..67f75c536b 100644 --- a/eigrpd/eigrp_hello.c +++ b/eigrpd/eigrp_hello.c @@ -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 @@ -707,7 +707,7 @@ void eigrp_hello_send_ack(struct eigrp_neighbor *nbr) inet_ntoa(nbr->src)); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, ep); + eigrp_fifo_push(nbr->ei->obuf, ep); /* Hook thread to write packet. */ if (nbr->ei->on_write_q == 0) { @@ -755,7 +755,7 @@ void eigrp_hello_send(struct eigrp_interface *ei, u_char flags, if (ep) { // Add packet to the top of the interface output queue - eigrp_fifo_push_head(ei->obuf, ep); + eigrp_fifo_push(ei->obuf, ep); /* Hook thread to write packet. */ if (ei->on_write_q == 0) { diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index dfc7463025..f38b759e9f 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -299,18 +299,6 @@ int eigrp_check_sha256_digest(struct stream *s, return 1; } -/* - * eigrp_packet_dump - * - * This routing dumps the contents of the IP packet either received or - * built by EIGRP. - */ -static void eigrp_packet_dump(struct stream *s) -{ - // not yet... - return; -} - int eigrp_write(struct thread *thread) { struct eigrp *eigrp = THREAD_ARG(thread); @@ -322,6 +310,7 @@ int eigrp_write(struct thread *thread) struct msghdr msg; struct iovec iov[2]; u_int16_t opcode = 0; + u_int32_t seqno, ack; int ret; int flags = 0; @@ -347,7 +336,7 @@ int eigrp_write(struct thread *thread) #endif /* WANT_EIGRP_WRITE_FRAGMENT */ /* Get one packet from queue. */ - ep = eigrp_fifo_head(ei->obuf); + ep = eigrp_fifo_next(ei->obuf); assert(ep); assert(ep->length >= EIGRP_HEADER_LEN); @@ -357,6 +346,25 @@ int eigrp_write(struct thread *thread) memset(&iph, 0, sizeof(struct ip)); memset(&sa_dst, 0, sizeof(sa_dst)); + /* + * We build and schedule packets to go out + * in the future. In the mean time we may + * process some update packets from the + * neighbor, thus making it necessary + * to update the ack we are using for + * this outgoing packet. + */ + eigrph = (struct eigrp_header *)STREAM_DATA(ep->s); + opcode = eigrph->opcode; + seqno = ntohl(eigrph->sequence); + ack = ntohl(eigrph->ack); + if (ep->nbr && (ack != ep->nbr->recv_sequence_number)) { + eigrph->ack = htonl(ep->nbr->recv_sequence_number); + ack = ep->nbr->recv_sequence_number; + eigrph->checksum = 0; + eigrp_packet_checksum(ei, ep->s, ep->length); + } + sa_dst.sin_family = AF_INET; #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN sa_dst.sin_len = sizeof(sa_dst); @@ -412,8 +420,9 @@ int eigrp_write(struct thread *thread) if (IS_DEBUG_EIGRP_TRANSMIT(0, SEND)) { eigrph = (struct eigrp_header *)STREAM_DATA(ep->s); opcode = eigrph->opcode; - zlog_debug("Sending [%s] to [%s] via [%s] ret [%d].", + zlog_debug("Sending [%s][%d/%d] to [%s] via [%s] ret [%d].", lookup_msg(eigrp_packet_type_str, opcode, NULL), + seqno, ack, inet_ntoa(ep->dst), IF_NAME(ei), ret); } @@ -425,22 +434,10 @@ int eigrp_write(struct thread *thread) iph.ip_len, ei->ifp->name, ei->ifp->mtu, safe_strerror(errno)); - /* Show debug sending packet. */ - if (IS_DEBUG_EIGRP_TRANSMIT(0, SEND) - && (IS_DEBUG_EIGRP_TRANSMIT(0, PACKET_DETAIL))) { - zlog_debug( - "-----------------------------------------------------"); - eigrp_ip_header_dump(&iph); - stream_set_getp(ep->s, 0); - eigrp_packet_dump(ep->s); - zlog_debug( - "-----------------------------------------------------"); - } - /* Now delete packet from queue. */ eigrp_packet_delete(ei); - if (eigrp_fifo_head(ei->obuf) == NULL) { + if (eigrp_fifo_next(ei->obuf) == NULL) { ei->on_write_q = 0; list_delete_node(eigrp->oi_write_q, node); } @@ -615,12 +612,16 @@ int eigrp_read(struct thread *thread) start of the eigrp TLVs */ opcode = eigrph->opcode; - if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV)) - zlog_debug( - "Received [%s] length [%u] via [%s] src [%s] dst [%s]", - lookup_msg(eigrp_packet_type_str, opcode, NULL), length, - IF_NAME(ei), inet_ntoa(iph->ip_src), - inet_ntoa(iph->ip_dst)); + if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV)) { + char src[100], dst[100]; + + strcpy(src, inet_ntoa(iph->ip_src)); + strcpy(dst, inet_ntoa(iph->ip_dst)); + zlog_debug("Received [%s][%d/%d] length [%u] via [%s] src [%s] dst [%s]", + lookup_msg(eigrp_packet_type_str, opcode, NULL), + ntohl(eigrph->sequence), ntohl(eigrph->ack), length, + IF_NAME(ei), src, dst); + } /* Read rest of the packet and call each sort of packet routine. */ stream_forward_getp(ibuf, EIGRP_HEADER_LEN); @@ -635,7 +636,7 @@ int eigrp_read(struct thread *thread) struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->retrans_queue); + ep = eigrp_fifo_next(nbr->retrans_queue); if (ep) { if (ntohl(eigrph->ack) == ep->sequence_number) { if ((nbr->state == EIGRP_NEIGHBOR_PENDING) @@ -643,24 +644,24 @@ int eigrp_read(struct thread *thread) == nbr->init_sequence_number)) { eigrp_nbr_state_set(nbr, EIGRP_NEIGHBOR_UP); - zlog_info( - "Neighbor adjacency became full"); + zlog_info("Neighbor(%s) adjacency became full", + inet_ntoa(nbr->src)); nbr->init_sequence_number = 0; nbr->recv_sequence_number = ntohl(eigrph->sequence); eigrp_update_send_EOT(nbr); } - ep = eigrp_fifo_pop_tail(nbr->retrans_queue); + ep = eigrp_fifo_pop(nbr->retrans_queue); eigrp_packet_free(ep); if (nbr->retrans_queue->count > 0) { eigrp_send_packet_reliably(nbr); } } } - ep = eigrp_fifo_tail(nbr->multicast_queue); + ep = eigrp_fifo_next(nbr->multicast_queue); if (ep) { if (ntohl(eigrph->ack) == ep->sequence_number) { - ep = eigrp_fifo_pop_tail(nbr->multicast_queue); + ep = eigrp_fifo_pop(nbr->multicast_queue); eigrp_packet_free(ep); if (nbr->multicast_queue->count > 0) { eigrp_send_packet_reliably(nbr); @@ -826,13 +827,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; } @@ -841,13 +843,13 @@ void eigrp_send_packet_reliably(struct eigrp_neighbor *nbr) { struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->retrans_queue); + ep = eigrp_fifo_next(nbr->retrans_queue); if (ep) { struct eigrp_packet *duplicate; duplicate = eigrp_packet_duplicate(ep, nbr); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, duplicate); + eigrp_fifo_push(nbr->ei->obuf, duplicate); /*Start retransmission timer*/ thread_add_timer(master, eigrp_unack_packet_retrans, nbr, @@ -901,7 +903,7 @@ void eigrp_packet_header_init(int type, struct eigrp_interface *ei, // eigrph->sequence = htonl(3); eigrph->flags = htonl(flags); - if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV)) + if (IS_DEBUG_EIGRP_TRANSMIT(0, PACKET_DETAIL)) zlog_debug("Packet Header Init Seq [%u] Ack [%u]", htonl(eigrph->sequence), htonl(eigrph->ack)); @@ -909,7 +911,7 @@ void eigrp_packet_header_init(int type, struct eigrp_interface *ei, } /* Add new packet to head of fifo. */ -void eigrp_fifo_push_head(struct eigrp_fifo *fifo, struct eigrp_packet *ep) +void eigrp_fifo_push(struct eigrp_fifo *fifo, struct eigrp_packet *ep) { ep->next = fifo->head; ep->previous = NULL; @@ -925,14 +927,8 @@ void eigrp_fifo_push_head(struct eigrp_fifo *fifo, struct eigrp_packet *ep) fifo->count++; } -/* Return first fifo entry. */ -struct eigrp_packet *eigrp_fifo_head(struct eigrp_fifo *fifo) -{ - return fifo->head; -} - /* Return last fifo entry. */ -struct eigrp_packet *eigrp_fifo_tail(struct eigrp_fifo *fifo) +struct eigrp_packet *eigrp_fifo_next(struct eigrp_fifo *fifo) { return fifo->tail; } @@ -947,27 +943,6 @@ void eigrp_packet_delete(struct eigrp_interface *ei) eigrp_packet_free(ep); } -/* Delete first packet from fifo. */ -struct eigrp_packet *eigrp_fifo_pop(struct eigrp_fifo *fifo) -{ - struct eigrp_packet *ep; - - ep = fifo->head; - - if (ep) { - fifo->head = ep->next; - - if (fifo->head == NULL) - fifo->tail = NULL; - else - fifo->head->previous = NULL; - - fifo->count--; - } - - return ep; -} - void eigrp_packet_free(struct eigrp_packet *ep) { if (ep->s) @@ -1028,14 +1003,14 @@ int eigrp_unack_packet_retrans(struct thread *thread) nbr = (struct eigrp_neighbor *)THREAD_ARG(thread); struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->retrans_queue); + ep = eigrp_fifo_next(nbr->retrans_queue); if (ep) { struct eigrp_packet *duplicate; duplicate = eigrp_packet_duplicate(ep, nbr); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, duplicate); + eigrp_fifo_push(nbr->ei->obuf, duplicate); ep->retrans_counter++; if (ep->retrans_counter == EIGRP_PACKET_RETRANS_MAX) @@ -1065,13 +1040,13 @@ int eigrp_unack_multicast_packet_retrans(struct thread *thread) nbr = (struct eigrp_neighbor *)THREAD_ARG(thread); struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->multicast_queue); + ep = eigrp_fifo_next(nbr->multicast_queue); if (ep) { struct eigrp_packet *duplicate; duplicate = eigrp_packet_duplicate(ep, nbr); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, duplicate); + eigrp_fifo_push(nbr->ei->obuf, duplicate); ep->retrans_counter++; if (ep->retrans_counter == EIGRP_PACKET_RETRANS_MAX) @@ -1096,7 +1071,7 @@ int eigrp_unack_multicast_packet_retrans(struct thread *thread) } /* Get packet from tail of fifo. */ -struct eigrp_packet *eigrp_fifo_pop_tail(struct eigrp_fifo *fifo) +struct eigrp_packet *eigrp_fifo_pop(struct eigrp_fifo *fifo) { struct eigrp_packet *ep; @@ -1121,7 +1096,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; diff --git a/eigrpd/eigrp_packet.h b/eigrpd/eigrp_packet.h index 2f607e5cab..040204a7fc 100644 --- a/eigrpd/eigrp_packet.h +++ b/eigrpd/eigrp_packet.h @@ -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 *); @@ -48,11 +48,9 @@ extern void eigrp_packet_checksum(struct eigrp_interface *, struct stream *, u_int16_t); extern struct eigrp_fifo *eigrp_fifo_new(void); -extern struct eigrp_packet *eigrp_fifo_head(struct eigrp_fifo *); -extern struct eigrp_packet *eigrp_fifo_tail(struct eigrp_fifo *); +extern struct eigrp_packet *eigrp_fifo_next(struct eigrp_fifo *); extern struct eigrp_packet *eigrp_fifo_pop(struct eigrp_fifo *); -extern struct eigrp_packet *eigrp_fifo_pop_tail(struct eigrp_fifo *); -extern void eigrp_fifo_push_head(struct eigrp_fifo *, struct eigrp_packet *); +extern void eigrp_fifo_push(struct eigrp_fifo *, struct eigrp_packet *); extern void eigrp_fifo_free(struct eigrp_fifo *); extern void eigrp_fifo_reset(struct eigrp_fifo *); diff --git a/eigrpd/eigrp_query.c b/eigrpd/eigrp_query.c index 653eae258f..d6299ad923 100644 --- a/eigrpd/eigrp_query.c +++ b/eigrpd/eigrp_query.c @@ -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, @@ -207,7 +207,7 @@ void eigrp_send_query(struct eigrp_interface *ei) for (ALL_LIST_ELEMENTS(ei->nbrs, node2, nnode2, nbr)) { if (nbr->state == EIGRP_NEIGHBOR_UP) { /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); ep_saved = true; if (nbr->retrans_queue->count == 1) { diff --git a/eigrpd/eigrp_reply.c b/eigrpd/eigrp_reply.c index 4eb08c60d0..60390ad8a3 100644 --- a/eigrpd/eigrp_reply.c +++ b/eigrpd/eigrp_reply.c @@ -84,9 +84,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe) plist = e->prefix[EIGRP_FILTER_OUT]; alist_i = nbr->ei->list[EIGRP_FILTER_OUT]; plist_i = nbr->ei->prefix[EIGRP_FILTER_OUT]; - zlog_info("REPLY Send: Filtering"); - zlog_info("REPLY SEND Prefix: %s", inet_ntoa(nbr->src)); /* Check if any list fits */ if ((alist && access_list_apply(alist, (struct prefix *)pe2->destination_ipv4) @@ -106,15 +104,13 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe) zlog_info("REPLY SEND: Setting Metric to max"); pe2->reported_metric.delay = EIGRP_MAX_METRIC; - } else { - zlog_info("REPLY SEND: Not setting metric"); } /* * 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, @@ -144,7 +140,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe) ep->sequence_number = nbr->ei->eigrp->sequence_number; /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); diff --git a/eigrpd/eigrp_siaquery.c b/eigrpd/eigrp_siaquery.c index f16f49a330..215df7b8ee 100644 --- a/eigrpd/eigrp_siaquery.c +++ b/eigrpd/eigrp_siaquery.c @@ -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, @@ -153,7 +153,7 @@ void eigrp_send_siaquery(struct eigrp_neighbor *nbr, if (nbr->state == EIGRP_NEIGHBOR_UP) { /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); diff --git a/eigrpd/eigrp_siareply.c b/eigrpd/eigrp_siareply.c index 9a768566d3..32f0c8be33 100644 --- a/eigrpd/eigrp_siareply.c +++ b/eigrpd/eigrp_siareply.c @@ -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, @@ -152,7 +152,7 @@ void eigrp_send_siareply(struct eigrp_neighbor *nbr, if (nbr->state == EIGRP_NEIGHBOR_UP) { /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); diff --git a/eigrpd/eigrp_structs.h b/eigrpd/eigrp_structs.h index fd3e4b2014..0c15436d4f 100644 --- a/eigrpd/eigrp_structs.h +++ b/eigrpd/eigrp_structs.h @@ -311,6 +311,8 @@ struct eigrp_packet { /* EIGRP packet length. */ u_int16_t length; + + struct eigrp_neighbor *nbr; }; struct eigrp_fifo { diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index e0169c514b..68c0b92fd8 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -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)) @@ -497,7 +497,7 @@ void eigrp_update_send_init(struct eigrp_neighbor *nbr) ep->length, ep->sequence_number, inet_ntoa(ep->dst)); /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); @@ -528,7 +528,7 @@ static void eigrp_update_place_on_nbr_queue(struct eigrp_neighbor *nbr, ep->length, ep->sequence_number, inet_ntoa(ep->dst)); /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); } void eigrp_update_send_EOT(struct eigrp_neighbor *nbr) @@ -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, @@ -684,13 +684,9 @@ void eigrp_update_send(struct eigrp_interface *ei) && prefix_list_apply(plist_i, (struct prefix *)dest_addr) == PREFIX_DENY)) { - zlog_info("PROC OUT: Skipping"); // pe->reported_metric.delay = EIGRP_MAX_METRIC; - zlog_info("PROC OUT Prefix: %s", - inet_ntoa(dest_addr->prefix)); continue; } else { - zlog_info("PROC OUT: NENastavujem metriku "); length += eigrp_add_internalTLV_to_stream(ep->s, pe); has_tlv = 1; @@ -731,7 +727,7 @@ void eigrp_update_send(struct eigrp_interface *ei) if (nbr->state == EIGRP_NEIGHBOR_UP) { packet_sent = true; /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); @@ -762,8 +758,6 @@ void eigrp_update_send_all(struct eigrp *eigrp, pe->req_action &= ~EIGRP_FSM_NEED_UPDATE; listnode_delete(eigrp->topology_changes_internalIPV4, pe); - zlog_debug("UPDATE COUNT: %d", - eigrp->topology_changes_internalIPV4->count); } } } @@ -835,7 +829,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, @@ -980,7 +974,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr) ep->length, ep->sequence_number, inet_ntoa(ep->dst)); /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr);