summaryrefslogtreecommitdiff
path: root/proto/ospf
AgeCommit message (Collapse)Author
2022-06-27Preexport callback now takes the channel instead of protocol as argumentMaria Matejka
Passing protocol to preexport was in fact a historical relic from the old times when channels weren't a thing. Refactoring that to match current extensibility needs.
2021-06-17Nest: Clean up main channel handlingOndrej Zajicek (work)
Remove assumption that main channel is the only channel.
2021-05-26OSPF: Fix OSPFv3 in IPv4 mode with multiple areasOndrej Zajicek (work)
Some area handling code got confused by IPv4 setup in OSPFv3 mode.
2021-05-10OSPF: Allow ifaces with host address as unnumbered PtP or PtMP ifacesOndrej Zajicek (work)
Ifaces with host address (/32) were forced to be stubby, but now they can be used as PtP or PtMP. For these ifaces we need to: - Do not force stub mode - Accept packets from any IP as local - Accept any configured neighbor as local - Detect ifaces properly as unnumbered - Use ONLINK flag for nexthops
2021-05-09OSPF: Packets on PtP networks should be always sent to AllSPFRoutersOndrej Zajicek (work)
As specified in RFC 2328 8.1: "On physical point-to-point networks, the IP destination is always set to the address AllSPFRouters." Note that this likely break setups with multiple neighbors on a network configured as PtP, which worked before. These should be configured as PtMP. Thanks to Senthil Kumar Nagappan for the original patch and to Joakim Tjernlund for suggestions.
2021-05-09OSPF: Minor refactoring of packet sending codeOndrej Zajicek (work)
Common behavior for LSupd and delayed LSack moved to ospf_send_to_iface() and other minor changes.
2021-03-16OSPFv3: Update neighbor authentication state from Hello packetsOndrej Zajicek (work)
In OSPFv3, only Hello and DBDes packets contain flags specifying whether RFC 7166 authentication trailer is used. Other packets are processed based on stored authentication state in neighbor structure. Update this state with each received Hello to handle authentication change from reconfigurations. Thanks to Joakim Tjernlund and Kenth Eriksson for the bugreport.
2020-11-24Some minor sl_allocz() cleanupsOndrej Zajicek (work)
2020-11-18OSPFv3: Fix intra-area-prefix-LSA origination on DROndrej Zajicek (work)
When a new link-LSA is originated, we need to notify intra-area-prefix-LSA handling, like when a new link-LSA is received. Otherwise a new network prefix added to a DR is not propagated immediately. Thanks to Bala Sajja for the bugreport.
2020-11-08BFD: Allow per-request session optionsOndrej Zajicek (work)
BFD session options are configured per interface in BFD protocol. This patch allows to specify them also per-request in protocols requesting sessions (currently limited to BGP).
2020-08-31OSPF: Fixed a debug assertMaria Matejka
2020-08-12OSPF: Skip out-of-state packets earlierOndrej Zajicek (work)
Sometimes multicast OSPF packet is received when neighbor adjacency is not established. Such packet should be ignored earlier in packet processing as otherwise it causes strange error messages when OSPFv3 authentication is enabled.
2020-06-28Show info from multiple protocols when protocol is not specifiedOndrej Zajicek (work)
Most commands like 'show ospf neighbors' fail when protocol is not specified and there are multiple instances of given protocol type. This is annoying in BIRD 2, as many protocols have IPv4 and IPv6 instances. The patch changes that by showing output from all protocol instances of appropriate type. Note that the patch also removes terminating cli_msg() call from these commands and moves it to the common iterating code.
2020-06-10OSPF: Fix bad header length testOndrej Zajicek (work)
Thanks to Slava Aseev for the thorough bugreport.
2020-06-02OSPF: setting list node to zero before enlistingMaria Matejka
2020-05-26OSPF: Fix handling of unnumbered PtPsOndrej Zajicek (work)
This issue has a long history. In 2012, we changed data field for unnumbered PtP links from iface id (specified by RFC) to IP address based on reports of bugs in Quagga that required it, and we used out-of-band information to distinquish unnumberred PtPs with the same local IP address. Then with OSPF graceful restart implementation, we found that we can no longer use out-of-band information, and we need to use only LSAdb info for routing table calculation, but i forgot to finish handling of this case, so multiple unnumbered PtPs with the same local IP addresses were broken. Considering that even recent Mikrotik RouterOS has broken next hop calculation that depends on IP address in PtP link data field, we cannot just switch back to the iface id for unnumbered PtP links. The patch makes two changes: First, it goes back to use out-of-band (position) info for distinguishing local interfaces in SPF when graceful restart is not enabled, while still uses LSAdb-only approach for SPF calculation when graceful restart is enabled. Second, it adds OSPF interface option 'ptp address', which controls whether IP address or iface id is used in data field. It is enabled by default except for unnumbered PtP links with enabled graceful restart. Thanks to Kenth Eriksson for the bugreport and Joakim Tjernlund for suggestions.
2020-05-01Nest: Added const to ea_show just to declare that this shouldn't really ↵Maria Matejka
change anything
2020-05-01OSPF: Zero-initialization of a temporary neighborMaria Matejka
2020-05-01OSPF: Adding a note about a static analyzer result.Maria Matejka
2020-05-01OSPF: variable-length array of size 0 replaced by alloca()'d pointerMaria Matejka
NULL pointer is safer than a random pointer onto stack if this function gets changed and eventually broken.
2020-04-09Configuration strings are constant.Maria Matejka
This is merely a const propagation. There was no problem in there.
2020-01-09OSPF: Fix bad initialization of tx_hdrlen fieldOndrej Zajicek (work)
Function ifa_tx_hdrlen() uses fields autype and passwords, so it must be called after these are set. Thanks to Kenth Eriksson for the bugreport.
2019-08-29OSPF: Fix 'show ospf lsadb' cmd without proto argOndrej Zajicek (work)
It crashed when used without protocol argument. Thanks to Alexander for the bugreport.
2019-07-24Merge remote-tracking branch 'origin/mq-filter-stack'Ondrej Zajicek (work)
2019-07-23OSPF: Fix formatting of 'show ospf neighbors'Ondrej Zajicek (work)
The formatting was broken when too short router-id was used.
2019-07-17BFD: Support for VRFsOndrej Zajicek (work)
Allow multiple BFD instances in separate VRFs, dispatch BFD requests according to VRFs. Thanks to Alexander Zubkov for notice and patches.
2019-07-15Merge remote-tracking branch 'origin/master' into mq-filter-stackMaria Matejka
2019-07-10OSPF: Fix handling of NSSA option flagsOndrej Zajicek (work)
Per RFC 3101, N-bit signalling NSSA support should be used only in Hello packets, not in DBDES packets. BIRD since 2.0.4 verifies N-bit in neighbor structure, which is learned from DBDES packets, therefore NSSA-LSAs are not propagated to proper implementations of RFC 3101. This patch fixes that. Both removing the check and removing N-bit from DBDES packet. This will fix compatibility issues with proper implementations, but causes compatibility issues with BIRD 2.0.4.
2019-07-10Merge branch 'master' into mq-filter-stackMaria Matejka
2019-07-09OSPF: Minor fix in graceful restartOndrej Zajicek (work)
Most LSA origination is blocked in ospf_update_topology(), this fix blocks LSA origination from ospf_rt_spf().
2019-07-09OSPF: Update DR when local priority changesOndrej Zajicek (work)
When priority is reconfigured locally, we need to trigger DR election. (recommiting, was reset by the previous commit)
2019-07-09OSPF: Fix handling of external routes on graceful restartOndrej Zajicek (work)
We need to flush learned external LSAs a bit later than other LSAs (after first feed after end of the graceful restart) to avoid flap of external routes.
2019-07-04OSPF: Update DR when local priority changesOndrej Zajicek (work)
When priority is reconfigured locally, we need to trigger DR election.
2019-07-03Merge branch 'master' into mq-filter-stackMaria Matejka
2019-07-03Dynamic attributes definition split whether it is bitmask or not.Maria Matejka
2019-06-30OSPF: Support for graceful restartOndrej Zajicek (work)
Implement OSPFv2 (RFC 3623) and OSPFv3 (RFC 5187) graceful restart, for both restarting and helper sides. Graceful restart is initiated by 'graceful down' command.
2019-05-17Lexer now returns known sym / unknown sym / keywordMaria Matejka
2019-04-12OSPFv3: Fix some overlooked cases in IPv4 modeOndrej Zajicek (work)
Prefixes with max length (/32) were not handled properly. Thanks to bauen1 for the bugreport.
2019-03-18Merge branch 'master' into HEADMaria Matejka
2019-03-14Nest: Update handling of temporary attributesOndrej Zajicek (work)
The temporary atttributes are no longer removed by ea_do_prune(), but they are undefined by store_tmp_attrs() protocol hooks. This fixes several bugs where temporary attributes were removed when they should not or not removed when they should be. The flag EAF_TEMP is no longer needed and was removed. Update all protocol make_tmp_attrs() / store_tmp_attrs() hooks to use helper functions and to handle unset attributes properly. Also fix some related bugs like improper handling of empty eattr list.
2019-03-06OSPF: Improved handling of tmpattrsOndrej Zajicek (work)
Keep track of whether OSPF tmpattrs are actually defined for given route (using flags in rte->pflags). That makes them behave more like real eattrs so a protocol can define just a subset of them or they can be undefined by filters. Do not set ospf_metric2 for other than type 2 external OSPF routes and do not set ospf_tag for non-external OSPF routes. That also fixes a bug where internal/inter-area route propagated from one OSPF instance to another is initiated with infinity ospf_metric2. Thanks to Yaroslav Dronskii for the bugreport.
2019-02-20Filter + Config: Fix bugs, tests and split symbols by typeMaria Matejka
2019-02-20Filter refactoring: dropped the recursion from the interpreterMaria Matejka
This is a major change of how the filters are interpreted. If everything works how it should, it should not affect you unless you are hacking the filters themselves. Anyway, this change should make a huge improvement in the filter performance as previous benchmarks showed that our major problem lies in the recursion itself. There are also some changes in nest and protocols, related mostly to spreading const declarations throughout the whole BIRD and also to refactored dynamic attribute definitions. The need of these came up during the whole work and it is too difficult to split out these not-so-related changes.
2019-02-17OSPF: Reset LSAs during area type changeOndrej Zajicek (work)
When area is reconfigured to a different type, we need to flush LSAs as they may not be valid (e.g. NSSA-LSA for non-NSSA area). Also, when we have have just one OSPF area and that changes type, we could restart OSPF as there is no state to keep anyway. That solves issue with different handling of external routes exported to OSPF based of main area type.
2019-02-13OSPF: Basic support for DN-bit handling (RFC 4576)Ondrej Zajicek (work)
External LSAs originated by OSPF routers with VPN-PE behavior enabled are marked by DN flag and they are ignored by other OSPF routers with VPN-PE enabled.
2019-02-09OSPF: Do not originate Router-Information LSAOndrej Zajicek (work)
As we do not have much usage for it yet.
2019-02-03OSPF: Send direct acknowledgements as unicastOndrej Zajicek (work)
Direct acknowledgements should be send as unicast to a corresponding neighbor. Only delayed acks should be send as multicast to all/designated routers.
2019-02-03OSPF: Reject duplicate DBDES packets after dead intervalOndrej Zajicek (work)
Master may free last DBDES packet immediately. Slave must wait dead interval before freeing last DBDES packet and then reject duplicate DBDES packets with SeqNumberMismatch.
2019-02-03OSPF: DD seqnum should be initialized only for first attemptsOndrej Zajicek (work)
After SeqNumberMismatch/BadLSReq, we should continue with the old seqnum++. The old code tries to do that by n->adj, but it was set nowhere.
2019-02-03OSPF: Reject DBDES packets with non-matching MTUOndrej Zajicek (work)
As it is specified in RFC 2328. The old code just provided warning.