diff options
author | Paul Jakma <paul.jakma@sun.com> | 2006-07-04 13:44:19 +0000 |
---|---|---|
committer | Paul Jakma <paul.jakma@sun.com> | 2006-07-04 13:44:19 +0000 |
commit | ba0beb4a846056301d6baa7f67002c6705084b40 (patch) | |
tree | 4a481f49e3993b61039f157be879173bc2b98e08 | |
parent | d7b0fb62ec78cfd31ff8d905490a5c929c44e971 (diff) |
[ospfd] Ensure NSM state functions can redirect next_state accidently
2006-07-02 Paul Jakma <paul.jakma@sun.com>
* 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.
-rw-r--r-- | ospfd/ChangeLog | 4 | ||||
-rw-r--r-- | ospfd/ospf_nsm.c | 16 |
2 files changed, 20 insertions, 0 deletions
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 <ajschorr@alumni.princeton.edu> 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), |