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/ospf_nsm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'ospfd/ospf_nsm.c') 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