summaryrefslogtreecommitdiffstats
path: root/zebra/if_ioctl_solaris.c
diff options
context:
space:
mode:
authorPaul Jakma <paul@quagga.net>2010-01-11 15:48:22 +0000
committerDavid Lamparter <equinox@diac24.net>2010-02-05 01:02:21 +0100
commitb0c8c48d7fa4c691ddbe07403ccc37a26258a25e (patch)
treefbb59b63b3bf37cecd5718b598d325be4c3c4251 /zebra/if_ioctl_solaris.c
parentd0f7c7eadaa8d46306609305bc610ec902c522c2 (diff)
downloadquagga-b0c8c48d7fa4c691ddbe07403ccc37a26258a25e.tar.bz2
quagga-b0c8c48d7fa4c691ddbe07403ccc37a26258a25e.tar.xz
ospfd: use workqueue for ospf_ase_calculate_route
* The ospf_ase_calculate_timer can take a long time to run, as it scales O(# of AS-External LSAs), in domains with lots of external routes. Fix this by using a work-queue for the per-LSA processing, thus splitting it up a bit. * ospf_ase.h: (ospf_ase_calculate_route, ospf_ase_calculate_schedule) no need for these to be exported. * ospf_spf.c: (ospf_spf_calculate_timer) ospf_ase_calculate_schedule is gone. * ospfd.h: (struct ospf) add a work-queue for the AS-External route calculation. * ospf_ase.c: (ospf_ase_calc_completion) completion func, for when ase-calculation is done. Also have to take care to see if the timer needs to be rescheduled, which is the case if ospf->ase_calc is set again but there is no timer scheduled. (ospf_ase_calc_process) workqueue processing function, calls to the existing ospf_ase_calculate_route. (ospf_ase_calculate_timer) add to work-queue, instead of calling ospf_ase_calculate_route directly. (ospf_ase_calculate_timer_add) do the job of ospf_ase_calculate_schedule which can be removed. Set flag so we can tell if a timer schedule comes in while the previous timer is running.
Diffstat (limited to 'zebra/if_ioctl_solaris.c')
0 files changed, 0 insertions, 0 deletions