summaryrefslogtreecommitdiff
path: root/ospfd/ospf_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_packet.c')
-rw-r--r--ospfd/ospf_packet.c92
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 (&current->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. */