ripd: Fix restriction on default RTE that's incompatible with CIDR
* ripd.c: (rip_response_process) A 0 address can still easily have a
non-zero netmask. E.g., 0/1 to complement 128/1. These should be allowed
through. See bug #903.
Modify to check for malformed pseudo-default routes, where the netmask is
0 but the address is non-0, and warn and drop such routes instead.
bgpd: Rollback "always send OPEN" a little, to workaround test suite issues
* "bgpd: Send OPEN immediately on inbound connections" doesn't play well with
some partial BGP implementations, test and conformance suites e.g., which
have rigid expectations about ordering and don't implement much of CD.
roll back, but only a little, by deferring OPEN sending on outbound till
* bgpd.h: (struct peer) add PEER_STATUS_OPEN_DEFERRED status flag.
Kind of a sub-fsm. Main FSM does not allow transition functions to
signal next-state - next-state is inflexibly fixed in the table -
so can't handle it cleanly at that level.
* bgp_fsm.c: (bgp_connect_success) Defer sending open if the peer is
an accept-peer/inbound and there appears to be an outbound connection
in progress. Set PEER_STATUS_OPEN_DEFERRED to signal to bgp_open_receive
that an OPEN still must be sent.
* bgp_packet.c: (bgp_open_receive) Send the OPEN here, when deferred.
bgpd: Config state related to OPEN must now be copied to accept peer.
* bgp_network.c: (bgp_accept) OPEN is now sent on accept peer, due to
"Send OPEN immediately on inbound connections", so configuration state
that affects OPEN also has to be copied for.
Fixes failure with Martin Winter / NetDEFs test cases, where bgpd was
failing to advertise configured AFI/SAFIs.