From ba0beb4a846056301d6baa7f67002c6705084b40 Mon Sep 17 00:00:00 2001 From: Paul Jakma Date: Tue, 4 Jul 2006 13:44:19 +0000 Subject: [ospfd] Ensure NSM state functions can redirect next_state accidently 2006-07-02 Paul Jakma * ospf_nsm.c: (ospf_nsm_event) Don't allow action functions to change next_state if the NSM tables do not indicate next_state is conditional, log warning if one tries - existing code appears fine though. --- ospfd/ChangeLog | 4 ++++ ospfd/ospf_nsm.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 7486b073..e3805c82 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -3,6 +3,10 @@ * ospf_nsm.c: (nsm_should_adj) New function, just consolidate the 10.4 adjacency check from nsm_twoway_received/nsm_adj_ok. (nsm_twoway_received/nsm_adj_ok) Use former. + (ospf_nsm_event) Don't allow action functions to change + next_state if the NSM tables do not indicate next_state is + conditional, log warning if one tries - existing code + appears fine though. 2006-06-30 Andrew J. Schorr diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c index c5a55367..73ed088f 100644 --- a/ospfd/ospf_nsm.c +++ b/ospfd/ospf_nsm.c @@ -878,6 +878,22 @@ ospf_nsm_event (struct thread *thread) if (! next_state) next_state = NSM [nbr->state][event].next_state; + else if (NSM [nbr->state][event].next_state != NSM_DependUpon) + { + /* There's a mismatch between the FSM tables and what an FSM + * action/state-change function returned. State changes which + * do not have conditional/DependUpon next-states should not + * try set next_state. + */ + zlog_warn ("NSM[%s:%s]: %s (%s): " + "Warning: action tried to change next_state to %s", + IF_NAME (oi), inet_ntoa (nbr->router_id), + LOOKUP (ospf_nsm_state_msg, nbr->state), + ospf_nsm_event_str [event], + LOOKUP (ospf_nsm_state_msg, next_state)); + + next_state = NSM [nbr->state][event].next_state; + } if (IS_DEBUG_OSPF (nsm, NSM_EVENTS)) zlog_debug ("NSM[%s:%s]: %s (%s)", IF_NAME (oi), -- cgit v1.2.1