summaryrefslogtreecommitdiffstats
path: root/ospfd (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga ↵Donald Sharp2015-11-273-74/+475
|\ | | | | | | into cmaster
| * Should be able to "no" the full text of any config lineDaniel Walton2015-11-233-74/+475
| | | | | | | | | | | | | | Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-5816
* | Quagga: prefix2str fixupDonald Sharp2015-11-233-7/+7
| | | | | | | | | | | | | | During CR for nexthop upstream it was noticed that usage of prefix2str was not consistent. This fixes this problem Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | Quagga: Fixup some compile warningsDonald Sharp2015-11-231-1/+1
|/ | | | | | Fixup compile warnings for when you turn on --enable-gcc-ultra-verbose=yes Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Quagga: Fixup cli and json keywordDonald Sharp2015-11-191-49/+36
| | | | | | | | | | | | | | | | | | | | The json keyword was being read incorrectly. Basically some commands read a variable # of arguments and in ospf the command values were being placed into argc and argv. With a variable # of arguments their existed a possibility that less arguments would be read from the cli than were being tested for in the command function handler. This caused core dumps in some situations. All code to read to decide to use the json keyword has been centralized through a function and all code converted to use it, irrelevant if it exhibited the bug Ticket: CM-8278 Reviewed by: CCR-3830 Testing: OSPF no longer crashes and all other test suites still run Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Zebra: Remove reliance on NEXTHOP_TYPE_IPV4_ONLINKDonald Sharp2015-11-161-32/+21
| | | | | | | | | | | | | | | | | Zebra already knows if an interface is unnumbered or not. This is communicated to OSPF. OSPF would only send a NEXTHOP_TYPE_IPV4_ONLINK *if* the path was unnumbered, which it learns from Zebra. As such, Have OSPF use the normal NEXTHOP_TYPE_IPV4_IFINDEX type for unnumbered paths. In Zebra, if the ifindex recieved is unnumbered then assume that the link is NEXTHOP_FLAG_ONLINK. Ticket: CM-8145 Reviewed-by: CCR-3771 Testing: See bug Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* OSPF: remove deprecated commandsDaniel Walton2015-11-131-40/+0
| | | | | | | Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-8142
* OSPF: Fix zlog_warn to zlog_debug in some unlikely scenariosDonald Sharp2015-11-091-8/+10
| | | | | | | | | | | When there is an OSPF missconfiguration, do not zlog_warn the fact as that it would quickly overwhelm any log file. Ticket: CM-7534 Reviewed by: CCR-3756 Testing: See bug Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga ↵Vipin Kumar2015-11-044-5/+71
|\ | | | | | | into cmaster
| * Enable OSPF "log-adjacency-changes" by defaultDaniel Walton2015-11-032-3/+9
| | | | | | | | | | | | | | Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-7941
| * Add "no debug ospf" and "no debug ospf6" commands to disable all ospf debuggingDaniel Walton2015-11-031-0/+60
| | | | | | | | | | | | | | Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-4010
| * lib: hide internal prefix list structuresDavid Lamparter2015-11-031-2/+2
| | | | | | | | | | | | | | These are about to be touched and there's no point in other code touching into prefix list's internas. Add some isolation. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* | *: add VRF ID in the API message headerFeng Lu2015-11-043-32/+63
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The API messages are used by zebra to exchange the interfaces, addresses, routes and router-id information with its clients. To distinguish which VRF the information belongs to, a new field "VRF ID" is added in the message header. And hence the message version is increased to 3. * The new field "VRF ID" in the message header: Length (2 bytes) Marker (1 byte) Version (1 byte) VRF ID (2 bytes, newly added) Command (2 bytes) - Client side: - zclient_create_header() adds the VRF ID in the message header. - zclient_read() extracts and validates the VRF ID from the header, and passes the VRF ID to the callback functions registered to the API messages. - All relative functions are appended with a new parameter "vrf_id", including all the callback functions. - "vrf_id" is also added to "struct zapi_ipv4" and "struct zapi_ipv6". Clients need to correctly set the VRF ID when using the API functions zapi_ipv4_route() and zapi_ipv6_route(). - Till now all messages sent from a client have the default VRF ID "0" in the header. - The HELLO message is special, which is used as the heart-beat of a client, and has no relation with VRF. The VRF ID in the HELLO message header will always be 0 and ignored by zebra. - Zebra side: - zserv_create_header() adds the VRF ID in the message header. - zebra_client_read() extracts and validates the VRF ID from the header, and passes the VRF ID to the functions which process the received messages. - All relative functions are appended with a new parameter "vrf_id". * Suppress the messages in a VRF which a client does not care: Some clients may not care about the information in the VRF X, and zebra should not send the messages in the VRF X to those clients. Extra flags are used to indicate which VRF is registered by a client, and a new message ZEBRA_VRF_UNREGISTER is introduced to let a client can unregister a VRF when it does not need any information in that VRF. A client sends any message other than ZEBRA_VRF_UNREGISTER in a VRF will automatically register to that VRF. - lib/vrf: A new utility "VRF bit-map" is provided to manage the flags for VRFs, one bit per VRF ID. - Use vrf_bitmap_init()/vrf_bitmap_free() to initialize/free a bit-map; - Use vrf_bitmap_set()/vrf_bitmap_unset() to set/unset a flag in the given bit-map, corresponding to the given VRF ID; - Use vrf_bitmap_check() to test whether the flag, in the given bit-map and for the given VRF ID, is set. - Client side: - In "struct zclient", the following flags are changed from "u_char" to "vrf_bitmap_t": redist[ZEBRA_ROUTE_MAX] default_information These flags are extended for each VRF, and controlled by the clients themselves (or with the help of zclient_redistribute() and zclient_redistribute_default()). - Zebra side: - In "struct zserv", the following flags are changed from "u_char" to "vrf_bitmap_t": redist[ZEBRA_ROUTE_MAX] redist_default ifinfo ridinfo These flags are extended for each VRF, as the VRF registration flags. They are maintained on receiving a ZEBRA_XXX_ADD or ZEBRA_XXX_DELETE message. When sending an interface/address/route/router-id message in a VRF to a client, if the corresponding VRF registration flag is not set, this message will not be dropped by zebra. - A new function zread_vrf_unregister() is introduced to process the new command ZEBRA_VRF_UNREGISTER. All the VRF registration flags are cleared for the requested VRF. Those clients, who support only the default VRF, will never receive a message in a non-default VRF, thanks to the filter in zebra. * New callback for the event of successful connection to zebra: - zclient_start() is splitted, keeping only the code of connecting to zebra. - Now zclient_init()=>zclient_connect()=>zclient_start() operations are purely dealing with the connection to zbera. - Once zebra is successfully connected, at the end of zclient_start(), a new callback is used to inform the client about connection. - Till now, in the callback of connect-to-zebra event, all clients send messages to zebra to request the router-id/interface/routes information in the default VRF. Of corse in future the client can do anything it wants in this callback. For example, it may send requests for both default VRF and some non-default VRFs. Signed-off-by: Feng Lu <lu.feng@6wind.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Donald Sharp <sharpd@cumulusnetworks.com> Conflicts: lib/zclient.h lib/zebra.h zebra/zserv.c zebra/zserv.h Conflicts: bgpd/bgp_nexthop.c bgpd/bgp_nht.c bgpd/bgp_zebra.c isisd/isis_zebra.c lib/zclient.c lib/zclient.h lib/zebra.h nhrpd/nhrp_interface.c nhrpd/nhrp_route.c nhrpd/nhrpd.h ospf6d/ospf6_zebra.c ospf6d/ospf6_zebra.h ospfd/ospf_vty.c ospfd/ospf_zebra.c pimd/pim_zebra.c pimd/pim_zlookup.c ripd/rip_zebra.c ripngd/ripng_zebra.c zebra/redistribute.c zebra/rt_netlink.c zebra/zebra_rnh.c zebra/zebra_rnh.h zebra/zserv.c zebra/zserv.h
* *: call if_init()/if_terminate() from vrf_init()/vrf_terminate()Feng Lu2015-10-302-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Later, an interface will belong to a specific VRF, and the interface initialization will be a part of the VRF initialization. So now call if_init() from vrf_init(), and if_terminate() from vrf_terminate(). Daemons have the according changes: - if if_init() was called or "iflist" was initialized, now call vrf_init() instead; - if if_terminate() was called or "iflist" was destroyed, now call vrf_terminate() instead. Signed-off-by: Feng Lu <lu.feng@6wind.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Vincent JARDIN <vincent.jardin@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org> Conflicts: bgpd/bgp_main.c pimd/pim_iface.c pimd/pim_iface.h pimd/pim_main.c pimd/pimd.c
* Zebra: Make redistribute do replace instead of del/add for better convergencevivek2015-10-212-16/+37
| | | | | | | | | | | | | | | | | | | Ticket: CM-6768 Reviewed By: CCR-3207 Testing Done: bgpsmoke, smoke, topo to create failure Redistributing routes goes through a del/add cycle whenever a redistributed is updated. This del/add cycle causes disruption by causing traffic loss for brief/long periods of time(6-8 s in case of OSPF). The modifications in this patch remove the del/add cycle to ensure that this disruption doesn't happen. Also fixed sending no forwarding address when announcing IPv4 routes with IPv6 nexthops, and sending nexthop only when there is a single path. Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
* OSPF needs to handle the previously added redist updateVipin Kumar2015-10-211-0/+10
| | | | | | | | | Ticket: CM-7388 Reviewed By: Donald, Vivek Testing Done: Cherry picking from 2.5.4, no testing on 3.0 yet OSPF needs to handle the previously added redist update/raplace semantics. Update has no new message type, it comes as ADD message.
* Print an error when user tries to change a previously configured area.Vipin Kumar2015-10-211-0/+3
| | | | | | Ticket: CM-5673 Reviewed By: Donald Testing Done: Cherry picking from 2.5.4, no testing in 3.0 yet.
* lib: zclient.c remove extern struct thread_master *Donald Sharp2015-09-233-4/+4
| | | | | | | | | | | | zclient.c depended upon link time inclusion of a extern struct thread_master *master. This is a violation of the namespace of the calling daemon. If a library needs the pointer pass it in and save it for future use. This code change also makes the zclient code consistent with the other lib functions that need to schedule work on your behalf Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Zebra: Add IPv6 protocol filtering support & Setting Src of IPv6 routesDinesh G Dutt2015-09-161-1/+1
| | | | | | | | | | | | | | | | | | Ticket: Reviewed By: CCR-3335 Testing Done: bgpsmoke, ENHE tests etc. Add support for filtering routes from upper layer protocols to zebra via route-maps for IPv6. The same functionality already existed for IPv4. In addition, add support for setting source of routes via IPv6 protocol map. Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Vivek Venkataraman <vivek@cumulusnetworks.com> Reviewed-by: Vipin Kumar <vipin@cumulusnetworks.com>
* Support of BFD status in Quaggaradhika2015-08-315-16/+127
| | | | | | | | | | | | | | | | Ticket:CM-6802, CM-6952 Reviewed By: Donald, Kanna Testing Done: Double commit of b76943235e09472ec174edcf7204fc82d27fe966 from br2.5. But, manually resolved all the compilation errors. Also, modified the shows to support the json format which was not supported in br2.5. CM-6802 – Currently, BFD session status can be monitored only through ptmctl. There is no way to check the BFD status of a peer/neighbor through Quagga. Debugging becomes easier if BFD status is shown in Quagga too. BFD status is relevant when it is shown against the BGP peer/OSPF neighbor. For, this following code changes have been done: - Only down messages from PTM were being propagated from Zebra daemon to clients (bgpd, ospfd and ospf6d). Now, both up and down messages are redistributed to the clients from zebra. BFD status field has been added to the messaging. Handling of BFD session up messages has been added to the client code. BGP/OSPF neighbor is brought down only if the old BFD session status is ‘Up’ to handle extra/initial down messages. - BFD status and last update timestamp fields have been added to the common BFD info structure. Also, common show functions for showing BFD information have been added to BFD lib. - Modified the BGP neighbor show functions to call common BFD lib functions. - For ospf and ospf6, BFD information was maintained only at interface level. To show BFD status per neighbor, BFD information has been added at neighbor level too. “show ip ospf interface”, “show ip ospf neighbor detail”, “show ipv6 ospf6 interface” and “show ipv6 ospf6 neighbor detail” output have been modified to show BFD information. CM-6952 - IBGP peers were always assumed to be multi-hop since there was no easy way to determine whether an IBGP peer was single hop or multihop unlike EBGP. But, this is causing problem with IBGP link local peers since BFD doesn't allow multihop BFD session with link local IP addresses. Link local peers were discovered when the interface peering was enabled. Interface peering is always singlehop. So, added checks to treat all interface based peers as single hop irrespective of whether the peer is IBGP or EBGP.
* Added json formating support to several show-...-detail ospf commands.Morgan Stewart2015-08-071-163/+417
| | | | | | | | | | | Ticket: CM-6520 Reviewed By: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed By: Donald Sharp <sharpd@cumulusnetworks.com> Signed-off-By: Morgan Stewart <morgan@cumulusnetworks.com> Testing Done: Manual testing and smoketested Whenever some sort of output is encountered, added a json version with proper logic as well.
* configuration options for faster OSPF convergenceMichael Rossberg2015-07-318-34/+121
| | | | | | | | | | | Allow configuration of faster OSPF convergence via the min_ls_interval and min_ls_arrival timer lengths. This patch was originated by Michael, and cross-ported to Cumulus's Quagga. Signed-off-by: Michael Rossberg <michael.rossberg@tu-ilmenau.de> Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* arm compilation failures.Donald Sharp2015-07-302-2/+3
| | | | | | | | | Ticket: Trivial Reviewed by: Trivial Testing: arm/powerpc/amd64 targets now build Apparently we have a arm build. Who knew? This fixes the compile warnings/errors produced when you compile a arm build with -Werror.
* Fixup of a few missed warnings after --enable-werror turned onDonald Sharp2015-07-262-1/+2
| | | | | | Ticket: Trivial Reviewed by: Trivial Testing: Compilation
* Add --enable-werror to configureDonald Sharp2015-07-261-0/+1
|
* Fixup of warnings in the codeDonald Sharp2015-07-261-12/+0
| | | | | | | | | Ticket: None Reviewed by: Trivial Testing: A bunch of warnings have crept in to the code base. This fixes the issue
* This patch changes ospfd from only listening mode for BFD status updates to ↵Donald Sharp2015-07-229-87/+406
| | | | | | | | | | | | | | | | | | interactive mode of dynamically registering/deregistering neighbors discovered on BFD enabled interfaces with PTM/BFD through zebra. Neighbor is registered with BFD when 2-way adjacency is established and deregistered when adjacency goes down if the BFD is enabled on the interface through which the neighbor was discovered. OSPF BFD command enhancement to configure BFD parameters (detect multiplier, min rx and min tx). interface <if-name> ip ospf bfd <detect mult> <min rx> <min tx> This patch also adds BFD support for IPv6 OSPF. ospf6d will dynamically register/deregister IPv6 neighbors with BFD for monitoring the connectivity of the neighbor. Neighbor is registered with BFD when 2-way adjacency is established and deregistered when adjacency goes down if the BFD is enabled on the interface through which the neighbor was discovered. OSPF6 BFD command added to configure BFD and parameters (detect multiplier, min rx and min tx). interface <if-name> ipv6 ospf6 bfd <detect mult> <min rx> <min tx> Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Kanna Rajagopal <kanna@cumulusnetworks.com>
* Add optional json capability to the "show ip ospf neighbor", "show ip ospf ↵Donald Sharp2015-07-221-80/+211
| | | | neighbor all", and "show ip ospf neighbor IFNAME" commands and whatever functions that they call.
* Add json capability to the "show ip ospf interface [INTERFACE]" and "show ip ↵Donald Sharp2015-07-221-117/+296
| | | | ospf <1-65535> interface [INTERFACE]" commands and whatever functions that they call. Option shows up as {json}.
* Add json capability to the ospf commands: "show ip ospf" and "show ip ospf ↵Donald Sharp2015-07-221-190/+498
| | | | <1-65535>". Optional argument will be {json} and will output a json object with all applicable information.
* This patch changes BGP from only listening mode for BFD status updates to ↵Donald Sharp2015-06-121-1/+1
| | | | | | | | | | | | | | | | interactive mode of dynamically registering/deregistering BFD enabled peers with PTM/BFD through zebra. Peer is registered with BFD when it goes into established state and de-registers when it goes out of establish state. This patch also adds BFD multihop support for BGP. Whether a peer is multi-hop or single hop is determined internally. All IGP peers are considered as multi-hop peers. EBGP peers are considered as single hop unless configured as multi-hop. BGP BFD command enhancement to configure BFD parameters (detect multiplier, min rx and min tx). router bgp <as-number> neighbor <name/ip-address> bfd <detect mult> <min rx> <min tx> Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Kanna Rajagopal <kanna@cumulusnetworks.com>
* zebra, bgpd, ospfd: 'redistribute table' to 'redistribute table <table-id>'Donald Sharp2015-06-111-19/+39
| | | | | | Table-id argument support wasnt complete, used the [proto, instance] combination changes that were done for OSPF multi-instance. In this case its 'table <table-id>' just like it was 'ospf <instance-id>'
* ospfd: ospfd-virtual-link.patchDonald Sharp2015-05-201-0/+5
| | | | | | | | | | ospfd: virtual links fix Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Basically ZEBRA_INTERFACE_LINKDETECTION is set to on by default now. Virtual links are failing to identify as up because of this code change. Modify ospf to set the flag as appropriate
* ospfd: ospfd-warnings.patchDonald Sharp2015-05-209-28/+20
| | | | | | Remove compile warnings for the ospfd/ospf6d directory Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by:
* ospfd: ospf_cli_fixesDonald Sharp2015-05-201-10/+149
| | | | | | | | | | | | ospf: Fix cli issues with timers throttle spf and no ip ospf authentication... When entering no timers throttle spf there was no way to specify the delay, hold time and max hold time so the command was rejected. This is useful for automated processes that take currently entered cli to remove the cli. When entering no ip ospf authentication most forms of the command were being ignored, this fixes that as well. Signed-off-by: Donald Sharp <sharpd at cumulusnetworks.com> Reviewed-by:
* Command to adjust min-arrival value in Milliseconds.Donald Sharp2015-05-207-3/+99
| | | | | | | timers lsa min-arrival <1-60000> Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
* Changing router-id inline isnt handled correctly in the current implementation.Donald Sharp2015-05-204-9/+70
| | | | | | | | | | | | | At the minimum, the OSPF_LSA_SELF logic isnt foolproof, and it may hit assert in ospf_refresh_unregister_lsa on a router-id change. Once OSPF has created and flooded LSAs, its not a good idea to change router-id inline. Tying it to restart has at least two benefits: - Implementation can remain sane by not having to re-adjust neighbors and LSAs, based on the new router-id. - Works as a deterrent for the user to not meddle with the router-id unless really needed.
* If on-shutdown is configured to a large value and 'service quagga restart'Donald Sharp2015-05-201-1/+1
| | | | | | | | | | | | | | | | | | is executed, then the init.d/quagga script doesnt wait more than 120 seconds for the daemon do stop, worse, it goes ahead and starts the new daemon regardless. This can result into two ospfd processes running on the same config. Which leads to many issues including but not limited to high cpu usage. Thats because the two processes are mixing packets on adjancencies thus causing churn on the box and network. As long as OSPF is able to reliably send the max-metric router-lsa before exiting thats mostly good enough for this purpose anyways. As a solution to this situation, bringing the maximum configurable value of the on-shutdown timer below the maximum retry to stop a daemon in init.d/quagga Notes: This may not be an upstreamable patch, still we needed to find a solution for init.d/quagga and this command this co-exist.
* The column headers for displaying OSPF neighbors are not alignedDonald Sharp2015-05-201-1/+1
|
* Add a running flag in ospf instance.Donald Sharp2015-05-203-40/+57
| | | | set/reset it on 'router ospf [<instance>]'/'no router ospf [<instance>]'
* Make OSPF compliant to the last sentence of this section in RFC 2328Donald Sharp2015-05-201-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | 9.5 Sending Hello packets Hello packets are sent out each functioning router interface. They are used to discover and maintain neighbor relationships.[6] On broadcast and NBMA networks, Hello Packets are also used to elect the Designated Router and Backup Designated Router. The format of an Hello packet is detailed in Section A.3.2. The Hello Packet contains the router's Router Priority (used in choosing the Designated Router), and the interval between Hello Packets sent out the interface (HelloInterval). The Hello Packet also indicates how often a neighbor must be heard from to remain active (RouterDeadInterval). Both HelloInterval and RouterDeadInterval must be the same for all routers attached to a common network. The Hello packet also contains the IP address mask of the attached network (Network Mask). On unnumbered point-to-point networks and on virtual links this field should be set to 0.0.0.0. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
* ospfd: ospf-start-lsreq-b4-exchange.patchDonald Sharp2015-05-202-1/+5
| | | | OSPFv2: Don't wait for state change to Exchange to start LSReq
* OSPF silently ignores 'no ip ospf hello-interval X' and 'no ip ospf ↵Donald Sharp2015-05-201-6/+28
| | | | | | | hello-interval X' Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
* Per AFI redist registrationsDonald Sharp2015-05-202-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | The problem is that zclient->redist[ZEBRA_ROUTE_MAX] used for storing a client’s redist state, has no address-family qualification. This means a client can only store its interest in a protocol (connected, static etc.), but cant choose IPv4 or ipv6 with that. This hindered implementation on client sides to manage redistribution of ipv4 and ipv6 both. BGP's redistribution of protocols like connected/static is one such place. One fix could be to overload this and flap the redist connection each time any new afi is added for redist, but that may have side-effects on the existing afi redist. The cleaner way is to modify redist data-structure to also take AFI, and adjust routines that deal with it, so that a client can register for a protocol redistribution based on the AFI. BGP already maintains redistribution state based on afi and protocol (bgp->redist[AFI_MAX][ZEBRA_ROUTE_MAX]). This patch takes care of filling up the gap in zclient/zserv redistribution state to also use AFI qualification. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
* ISSUE:Donald Sharp2015-05-201-3/+6
| | | | | | | | | | | | | | | | | | LSAcks (for directed acks) are being sent to neighbor's unicast address. RFC 2328 says: "The IP destination address for the packet is selected as follows. On physical point-to-point networks, the IP destination is always set to the address AllSPFRouters" Fix is to unconditionally set the destination address for LSAcks over point-to-point links as AllSPFRouters. Quagga OSPF already has similar change for OSPF DBD, LSUpdate and LSrequest packets. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
* Multi-Instance OSPF SummaryDonald Sharp2015-05-2017-684/+2616
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ——————————————------------- - etc/init.d/quagga is modified to support creating separate ospf daemon process for each instance. Each individual instance is monitored by watchquagga just like any protocol daemons.(requires initd-mi.patch). - Vtysh is modified to able to connect to multiple daemons of the same protocol (supported for OSPF only for now). - ospfd is modified to remember the Instance-ID that its invoked with. For the entire life of the process it caters to any command request that matches that instance-ID (unless its a non instance specific command). Routes/messages to zebra are tagged with instance-ID. - zebra route/redistribute mechanisms are modified to work with [protocol type + instance-id] - bgpd now has ability to have multiple instance specific redistribution for a protocol (OSPF only supported/tested for now). - zlog ability to display instance-id besides the protocol/daemon name. - Changes in other daemons are to because of the needed integration with some of the modified APIs/routines. (Didn’t prefer replicating too many separate instance specific APIs.) - config/show/debug commands are modified to take instance-id argument as appropriate. Guidelines to start using multi-instance ospf --------------------------------------------- The patch is backward compatible, i.e for any previous way of single ospf deamon(router ospf <cr>) will continue to work as is, including all the show commands etc. To enable multiple instances, do the following: 1. service quagga stop 2. Modify /etc/quagga/daemons to add instance-ids of each desired instance in the following format: ospfd=“yes" ospfd_instances="1,2,3" assuming you want to enable 3 instances with those instance ids. 3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf and ospfd-3.conf. 4. service quagga start/restart 5. Verify that the deamons are started as expected. You should see ospfd started with -n <instance-id> option. ps –ef | grep quagga With that /var/run/quagga/ should have ospfd-<instance-id>.pid and ospfd-<instance-id>/vty to each instance. 6. vtysh to work with instances as you would with any other deamons. 7. Overall most quagga semantics are the same working with the instance deamon, like it is for any other daemon. NOTE: To safeguard against errors leading to too many processes getting invoked, a hard limit on number of instance-ids is in place, currently its 5. Allowed instance-id range is <1-65535> Once daemons are up, show running from vtysh should show the instance-id of each daemon as 'router ospf <instance-id>’ (without needing explicit configuration) Instance-id can not be changed via vtysh, other router ospf configuration is allowed as before. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
* ospf6d: ospfv3-stub-area-support.patchDonald Sharp2015-05-201-4/+0
| | | | | | | Support stubby and totally stubby areas in OSPFv3 Signed-off-by: Dinesh G Dutt <ddutt at cumulusnetworks.com> Reviewed-by: Pradosh Mohapatra <pmohapat at cumulusnetworks.com>
* ospf6d: ospfv3-abr-ecmp-support.patchDonald Sharp2015-05-201-1/+0
| | | | | | | OSPFv3: Add ABR support and make ECMP > 4. Signed-off-by: Dinesh G Dutt <ddutt at cumulusnetworks.com> Signed-off-by: Pradosh Mohapatra <pmohapat at cumulusnetworks.com>
* per-interface ospf enable and area set command.Donald Sharp2015-05-204-20/+276
|
* Unnumbered interface support.Donald Sharp2015-05-206-41/+114
|