diff options
Diffstat (limited to 'ospfd/ospf_packet.c')
| -rw-r--r-- | ospfd/ospf_packet.c | 92 |
1 files changed, 45 insertions, 47 deletions
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index f7d1d0fa7d..11434071ad 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -14,14 +14,14 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GNU Zebra; see the file COPYING. If not, write to the Free - * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <zebra.h> +#include "monotime.h" #include "thread.h" #include "memory.h" #include "linklist.h" @@ -34,6 +34,7 @@ #include "sockopt.h" #include "checksum.h" #include "md5.h" +#include "vrf.h" #include "ospfd/ospfd.h" #include "ospfd/ospf_network.h" @@ -485,7 +486,8 @@ ospf_ls_req_event (struct ospf_neighbor *nbr) thread_cancel (nbr->t_ls_req); nbr->t_ls_req = NULL; } - nbr->t_ls_req = thread_add_event (master, ospf_ls_req_timer, nbr, 0); + nbr->t_ls_req = NULL; + thread_add_event(master, ospf_ls_req_timer, nbr, 0, &nbr->t_ls_req); } /* Cyclic timer function. Fist registered in ospf_nbr_new () in @@ -521,16 +523,18 @@ ospf_ls_upd_timer (struct thread *thread) struct ospf_lsa *lsa; if ((lsa = rn->info) != NULL) - /* Don't retransmit an LSA if we received it within - the last RxmtInterval seconds - this is to allow the - neighbour a chance to acknowledge the LSA as it may - have ben just received before the retransmit timer - fired. This is a small tweak to what is in the RFC, - but it will cut out out a lot of retransmit traffic - - MAG */ - if (tv_cmp (tv_sub (recent_relative_time (), lsa->tv_recv), - int2tv (retransmit_interval)) >= 0) - listnode_add (update, rn->info); + { + /* Don't retransmit an LSA if we received it within + the last RxmtInterval seconds - this is to allow the + neighbour a chance to acknowledge the LSA as it may + have ben just received before the retransmit timer + fired. This is a small tweak to what is in the RFC, + but it will cut out out a lot of retransmit traffic + - MAG */ + if (monotime_since (&lsa->tv_recv, NULL) + >= retransmit_interval * 1000000LL) + listnode_add (update, rn->info); + } } } @@ -846,9 +850,10 @@ ospf_write (struct thread *thread) } /* If packets still remain in queue, call write thread. */ - if (!list_isempty (ospf->oi_write_q)) - ospf->t_write = - thread_add_write (master, ospf_write, ospf, ospf->fd); + if (!list_isempty (ospf->oi_write_q)) { + ospf->t_write = NULL; + thread_add_write(master, ospf_write, ospf, ospf->fd, &ospf->t_write); + } return 0; } @@ -1469,10 +1474,8 @@ ospf_db_desc (struct ip *iph, struct ospf_header *ospfh, } else { - struct timeval t, now; - quagga_gettime (QUAGGA_CLK_MONOTONIC, &now); - t = tv_sub (now, nbr->last_send_ts); - if (tv_cmp (t, int2tv (nbr->v_inactivity)) < 0) + if (monotime_since (&nbr->last_send_ts, NULL) + < nbr->v_inactivity * 1000000LL) { /* In states Loading and Full the slave must resend its last Database Description packet in response to @@ -2074,12 +2077,8 @@ ospf_ls_upd (struct ospf *ospf, struct ip *iph, struct ospf_header *ospfh, recent) LSA instance. */ else { - struct timeval now; - - quagga_gettime (QUAGGA_CLK_MONOTONIC, &now); - - if (tv_cmp (tv_sub (now, current->tv_orig), - msec2tv (ospf->min_ls_arrival)) >= 0) + if (monotime_since (¤t->tv_orig, NULL) + >= ospf->min_ls_arrival * 1000LL) /* Trap NSSA type later.*/ ospf_ls_upd_send_lsa (nbr, current, OSPF_SEND_PACKET_DIRECT); DISCARD_LSA (lsa, 8); @@ -2221,7 +2220,7 @@ ospf_recv_packet (int fd, struct interface **ifp, struct stream *ibuf) ifindex = getsockopt_ifindex (AF_INET, &msgh); - *ifp = if_lookup_by_index (ifindex); + *ifp = if_lookup_by_index (ifindex, VRF_DEFAULT); if (ret != ip_len) { @@ -2774,7 +2773,8 @@ ospf_read (struct thread *thread) ospf = THREAD_ARG (thread); /* prepare for next packet. */ - ospf->t_read = thread_add_read (master, ospf_read, ospf, ospf->fd); + ospf->t_read = NULL; + thread_add_read(master, ospf_read, ospf, ospf->fd, &ospf->t_read); stream_reset(ospf->ibuf); if (!(ibuf = ospf_recv_packet (ospf->fd, &ifp, ospf->ibuf))) @@ -2791,7 +2791,7 @@ ospf_read (struct thread *thread) /* Handle cases where the platform does not support retrieving the ifindex, and also platforms (such as Solaris 8) that claim to support ifindex retrieval but do not. */ - c = if_lookup_address ((void *)&iph->ip_src, AF_INET); + c = if_lookup_address ((void *)&iph->ip_src, AF_INET, VRF_DEFAULT); if (c) ifp = c->ifp; if (ifp == NULL) @@ -2974,9 +2974,8 @@ ospf_read (struct thread *thread) ospf_ls_ack (iph, ospfh, ibuf, oi, length); break; default: - zlog (NULL, LOG_WARNING, - "interface %s: OSPF packet header type %d is illegal", - IF_NAME (oi), ospfh->type); + zlog_warn("interface %s: OSPF packet header type %d is illegal", + IF_NAME(oi), ospfh->type); break; } @@ -3456,8 +3455,8 @@ ospf_poll_timer (struct thread *thread) nbr_nbma->t_poll = NULL; if (IS_DEBUG_OSPF (nsm, NSM_TIMERS)) - zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (Poll timer expire)", - IF_NAME (nbr_nbma->oi), inet_ntoa (nbr_nbma->addr)); + zlog_debug("NSM[%s:%s]: Timer (Poll timer expire)", IF_NAME(nbr_nbma->oi), + inet_ntoa(nbr_nbma->addr)); ospf_poll_send (nbr_nbma); @@ -3480,8 +3479,8 @@ ospf_hello_reply_timer (struct thread *thread) assert (nbr->oi); if (IS_DEBUG_OSPF (nsm, NSM_TIMERS)) - zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (hello-reply timer expire)", - IF_NAME (nbr->oi), inet_ntoa (nbr->router_id)); + zlog_debug("NSM[%s:%s]: Timer (hello-reply timer expire)", + IF_NAME(nbr->oi), inet_ntoa(nbr->router_id)); ospf_hello_send_sub (nbr->oi, nbr->address.u.prefix4.s_addr); @@ -3577,7 +3576,7 @@ ospf_db_desc_send (struct ospf_neighbor *nbr) if (nbr->last_send) ospf_packet_free (nbr->last_send); nbr->last_send = ospf_packet_dup (op); - quagga_gettime (QUAGGA_CLK_MONOTONIC, &nbr->last_send_ts); + monotime(&nbr->last_send_ts); } /* Re-send Database Description. */ @@ -3805,8 +3804,9 @@ ospf_ls_upd_send_queue_event (struct thread *thread) if (IS_DEBUG_OSPF_EVENT) zlog_debug ("ospf_ls_upd_send_queue: update lists not cleared," " %d nodes to try again, raising new event", again); - oi->t_ls_upd_event = - thread_add_event (master, ospf_ls_upd_send_queue_event, oi, 0); + oi->t_ls_upd_event = NULL; + thread_add_event(master, ospf_ls_upd_send_queue_event, oi, 0, + &oi->t_ls_upd_event); } if (IS_DEBUG_OSPF_EVENT) @@ -3861,9 +3861,8 @@ ospf_ls_upd_send (struct ospf_neighbor *nbr, struct list *update, int flag) for (ALL_LIST_ELEMENTS_RO (update, node, lsa)) listnode_add (rn->info, ospf_lsa_lock (lsa)); /* oi->ls_upd_queue */ - if (oi->t_ls_upd_event == NULL) - oi->t_ls_upd_event = - thread_add_event (master, ospf_ls_upd_send_queue_event, oi, 0); + thread_add_event(master, ospf_ls_upd_send_queue_event, oi, 0, + &oi->t_ls_upd_event); } static void @@ -3924,9 +3923,8 @@ ospf_ls_ack_send (struct ospf_neighbor *nbr, struct ospf_lsa *lsa) listnode_add (oi->ls_ack_direct.ls_ack, ospf_lsa_lock (lsa)); - if (oi->t_ls_ack_direct == NULL) - oi->t_ls_ack_direct = - thread_add_event (master, ospf_ls_ack_send_event, oi, 0); + thread_add_event(master, ospf_ls_ack_send_event, oi, 0, + &oi->t_ls_ack_direct); } /* Send Link State Acknowledgment delayed. */ |
