summaryrefslogtreecommitdiffstats
path: root/pimd
Commit message (Collapse)AuthorAgeFilesLines
* *: use an ifindex_t type, defined in lib/if.h, for ifindex valuesPaul Jakma2016-02-2612-24/+27
|
* pimd: Limit pim hello log messagesDonald Sharp2015-12-083-80/+89
| | | | | | | | pimd was outputting allot of data surrounding pim hello packets. In addition the debugging was inconsistent and not all turned on via 'debug pim packet hello'. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Fix size_t zlog_err format string warningPaul Jakma2015-10-291-1/+1
| | | | * fc1c114aa / "pimd: Fix warning", the size_t arg should have a %zu format.
* Merge 'patch-tracking/4/proposed/netdef-solaris' into acceptedPaul Jakma2015-10-2810-13/+23
|\
| * pimd: Fix warningMartin Winter2015-10-161-1/+1
| | | | | | | | | | | | Fix long unsigned / unsigned mixup Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
| * pimd: use IPPROTO_IP (not SOL_IP) for IP_PKTINFODavid Lamparter2015-10-162-5/+5
| | | | | | | | | | | | | | Solaris uses the same socket API for IP_PKTINFO as Linux, but doesn't have a SOL_IP define. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * *: make sure zebra.h is always included firstDavid Lamparter2015-10-169-7/+17
| | | | | | | | | | | | | | | | zebra.h pulls in config.h, which results in fiddling with things like __FILE_OFFSET_BITS. It must always be included first, in order to set flags that influence the compiler via <features.h>. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* | pimd: Cleanup interface startupDonald Sharp2015-10-272-55/+18
| | | | | | | | | | | | | | This patch cleans up some interface startup, removes duplicate debug messages and protects against some always being displayed. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | pimd: Notice when we receive a packet type we can't handle yetDonald Sharp2015-10-271-0/+14
| | | | | | | | | | | | | | There are PIM packet types that have not been implemented yet. Notice when we get one of those and safely do nothing. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | pimd: Add knowledge of different packet typesDonald Sharp2015-10-271-0/+6
| | | | | | | | | | | | | | There are several additional packet types that pimd is unaware of Add code to allow pim to understand them in the future. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | pimd: Cleanup zebra debugs to be protected by debug commandsDonald Sharp2015-10-277-44/+48
| | | | | | | | | | | | | | | | pimd is very chatty without any pim debugs turned on. This commit fixes a bunch of the debugs to be protected by appropriate pim debug statement. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | pimd: Do not display some default values as part of a show runDonald Sharp2015-10-271-10/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is no need to display igmp default values for the query-interval and the query-max-response-time-dsec Before change: ! interface swp4 description swp4 -> host-212's swp1 ip igmp ip igmp query-interval 125 ip igmp query-max-response-time-dsec 100 ip pim ssm link-detect ! After change: ! interface br1 ip igmp ip pim ssm link-detect ! Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | quagga: Additional centos 6 -enable-werror fixesDonald Sharp2015-10-271-10/+12
| | | | | | | | | | | | | | | | | | | | This commit fixes these warnings: 1) bgpd/bgp_nexthop.c - dereferencing pointer 'X' does break strict-aliasing rules 2) pimd/pim_igmp_join.c - dereferencing pointer 'X' does break strict-aliasing rules 3) ripd/ripd.c - 'ifaddr.prefixlen' may be used uninitialized in this function Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | lib: zclient.c remove extern struct thread_master *Donald Sharp2015-10-274-5/+5
|/ | | | | | | | | | | | 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>
* pimd: Fix compile warning (error with Werror) on BSDPaul Jakma2015-09-241-2/+5
| | | | | * ioctl commands can vary in type between systems, cast to an unsigned long before passing to format command.
* pimd: Remove stdout zlog changesDonald Sharp2015-09-241-17/+1
| | | | | | | Quagga start has unnecessary pim messages to stdout. Causing some confusion. Logging is already saving this information in pimd.log Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Fix leaked fdDonald Sharp2015-09-241-0/+1
| | | | | | | When caling pim_sock_open if the failure cause happens, however unlikely, don't leak the fd on failure. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* lib/zclient: Consolidate error reporting for zclient_read_headerDonald Sharp2015-09-241-8/+1
| | | | | | | | All functions that call zclient_read_header immediately turn around and check to ensure that the version and marker fields are correct Move this code into zclient_read_header Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* bgpd/pimd: fix zAPI parsingNicolas Dichtel2015-09-241-27/+24
| | | | | | | | | | | | | Commit c99f3481a598 has changed the API. Now, the vrfid has been added in the header, thus we must read it before parsing the rest of the message. To ease code maintenance, let's add a new function to read a zAPI header. Fixes: c99f3481a598 ("*: add VRF ID in the API message header") Reported-by: Martin Winter <mwinter@opensourcerouting.org> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Donald Sharp <sharpd@cumulusnetworks.com> Tested-by: Martin Winter <mwinter@opensourcerouting.org>
* build: Remove the old PIC/PIE patch, let libtool sort it outPaul Jakma2015-09-031-2/+1
| | | | | | | * Remove the old change from '08 to add in PIE arguments at automake level. Versions of libtool since then know how to deal with -fpie and do the right thing according to whether its building shared or executable objects. So just pass '-fpie' as CFLAG and let libtool do its thing.
* pimd: Create ability to modify hell and hold timers per interfaceDonald Sharp2015-09-033-1/+79
| | | | | | | | | | | Create new per interface command: 'ip pim hello <1-180> {<1-180>}' The first number is the Hello Timer for this interface The second number is the Hold Timer to pass to neighbors on this interface. The second number is optional. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Change ioctl call failure from vty_out to zlog_warnDonald Sharp2015-08-211-10/+7
| | | | | | | | | | | | | | | | | | | | | | | | The command 'show ip multicast' when run, iterates over all interfaces on the router, if you do not have pim configured on that interface it would generate an error message: Interface Address ifi Vif PktsIn PktsOut BytesIn BytesOut br1 20.0.15.1 7 7 0 0 0 0 swp1 169.254.0.10 3 3 0 0 0 0 swp2 169.254.0.26 4 4 0 0 0 0 ioctl(SIOCGETVIFCNT=35296) failure for interface swp3 vif_index=-1: errno=22: Invalid argument ioctl(SIOCGETVIFCNT=35296) failure for interface swp4 vif_index=-1: errno=22: Invalid argument This fixes the issue to display this instead: Interface Address ifi Vif PktsIn PktsOut BytesIn BytesOut br1 20.0.15.1 7 7 0 0 0 0 swp1 169.254.0.10 3 3 0 0 0 0 swp2 169.254.0.26 4 4 0 0 0 0 swp3 0.0.0.0 5 -1 0 0 0 0 swp4 0.0.0.0 6 -1 0 0 0 0 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Ensure new generation_id is different from previousDonald Sharp2015-08-211-1/+13
| | | | | | | | | | | | | | | | The RFC states that an interfaces generation_id must be changed if it experiences an if down. From 4.3.1: The GenID option contains a randomly generated 32-bit value that is regenerated each time PIM forwarding is started or restarted on the interface, including when the router itself restarts. Since we are only grabbing a new generation_id without comparing it to the previous generation_id, it is possible that random can generate the exact same number. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Stop DR election on every helloDonald Sharp2015-08-211-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The DR election is occurring on every hello received. This is because the hello receive packet returns a 0 for any successfully received packet. PIMD then looked at the 0 returned and did a DR election. Code was inspected for the cases where DR should happen: (A) Interface ip address change (B) DR priority in hello packet changes (C) Received a new neighbor on an interface (D) Neighbor timer pops. Each of these initiate a DR election in the code currently. Testing was initiated on a pim network: tor-11# show ip pim designated-router NonPri: Number of neighbors missing DR Priority hello option Interface Address DR Uptime Elections Changes NonPri br1 20.0.15.1 20.0.15.1 00:08:16 1 1 0 swp1 169.254.0.10 169.254.0.10 00:08:16 2 1 0 swp2 169.254.0.26 169.254.0.26 00:08:16 2 1 0 tor-11# As you can see Elections == 2. This is because pimd performs an election on (A) and (C) above. I see no need to modify (A) to check if we have any knowledge of the interface before this call. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Fix first DR ElectionDonald Sharp2015-08-211-20/+20
| | | | | | | | | | | | The function pim_neighbor_new caused the dr election before the addition of the neighbor to the pim_ifp->pim_neighbor_list, in pim_neighbor_add, which is needed to properly elect the correct DR. Move the dr_election and hello trigger till after the addition to the list. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: Add ability to set DR Priority for an interfaceDonald Sharp2015-08-214-7/+82
| | | | | | | | | | | | | | | | | | From RFC 4601, Section 4.3.1: The DR_Priority Option allows a network administrator to give preference to a particular router in the DR election process by giving it a numerically larger DR Priority. The DR_Priority Option SHOULD be included in every Hello message, even if no DR Priority is explicitly configured on that interface. This is necessary because priority-based DR election is only enabled when all neighbors on an interface advertise that they are capable of using the DR_Priority Option. The default priority is 1. This modification allows the setting of the DR Priority on a per interface basis. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd: add support for configuring multicast static routesJafar Al-Gharaibeh2015-08-217-7/+730
| | | | | | | | | | | | | | | | | | | | | | Hi, This patch adds the ability to configure multicast static routes directly into pimd. Two source files are introduced to implement the new feature in addition to changes to existing files. Here is how it can be used the CLI: interface <incoming interface> ip mroute <outgoing interface> <group addr> # for asm or ip mroute <outgoing interface> <group addr> <source> # for ssm Please let me know if you have any questions or concerns, Regards, Jafar Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pim: 'show debugging' collisionDonald Sharp2015-07-291-6/+7
| | | | | | | The 'show debugging' cli as setup by pim collided with 'show debugging isis'. Fix that and clean up cli help commands to actually display correctly. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pimd assert when no route to source from a new igmp joinDonald Sharp2015-06-211-1/+6
| | | | | | | | | When pim_upstream_new is called the code looks up the nexthop. If there is no route to the source, the code silently ignored the error returned. When the nexthop lookup fails don't create the 'struct pim_stream *' to return. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pim_mroute.h has a different version of code than linux/mroute.h providesDonald Sharp2015-06-211-0/+4
| | | | | | | | | | | linux/mroutes.h and pim_mroute.h both have copies of the same structures. This is causing failures in setsockopt(..., MRT_ADD_MFC,...) because of data structure incompatibilities between the kernel and what pim_mroute.h was providing. Modify the code to check for mroute.h and include it if necessary. I did not modify the non linux/mroute.h path because I do not have other systems to test on easily. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* PIMD: Fix code to use srandom/randomDonald Sharp2015-06-216-101/+9
| | | | | | | | pimd rolled it's own solution to random #'s, that was not terribly random. Rely on the underlying system to generate random #'s for us Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* *: add VRF ID in the API message headerFeng Lu2015-06-032-17/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* *: call if_init()/if_terminate() from vrf_init()/vrf_terminate()Feng Lu2015-06-024-8/+4
| | | | | | | | | | | | | | | | | | 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>
* *: fix "babeld: Remove babeld from Quagga" (336724d)David Lamparter2015-05-201-1/+1
| | | | | | | | | | | | | | | | | | This removes some more bits of babeld, particularly from: - buildtest.sh - redhat/ build files - vtysh integration (which actively broke the build) The memtype and zclient/route type are kept in place since these don't break anything and -theoretically- make it possible to build babeld with some Quagga integration externally. (Keeping vtysh integration is unfortunately not as easy.) Reported-by: Donald Sharp <sharpd@cumulusnetworks.com> Fixes: 336724d ("babeld: Remove babeld from Quagga") Acked-by: Donald Sharp <sharpd@cumulusnetworks.com> Acked-by: Paul Jakma <paul@quagga.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* *: assorted warning fixesDavid Lamparter2015-04-211-0/+1
| | | | | | A few warnings slipped through the cracks... Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* pimd: fix out of tree buildDavid Lamparter2015-04-211-1/+1
| | | | | | | pimd/Makefile.am was missing srcdir/lib from its include paths, breaking out-of-tree build regarding route_types.h Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* build: add --enable-werrorDavid Lamparter2015-04-211-1/+1
| | | | | | | | | | | | | | | This allows enabling -Werror in a consistent way. Note that this is different from just specifiying it in CFLAGS, since that would either break configure tests (if done on ./configure), or would override configure's CFLAGS (if done on make). Using --enable-werror instead provides a new WERROR variable that is additionally used during make with a consistent set of warning flags. The tests/ directory is exempt. (Rationale being, better to have more tests than pedantically complain about them.) Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* pimd: cast ioctl values when printing themDavid Lamparter2015-04-211-4/+4
| | | | | | | | ioctl values might be int or long, cast them to unsigned long for consistent printing. (They're long on FreeBSD, but were printed with %d.) Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* pimd: cast to sockaddr_in to sockaddrDavid Lamparter2015-04-213-4/+7
| | | | | | | While glibc seems to have something in the system headers that prevents this from triggering a warning, FreeBSD doesn't. Fix the warning. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* pimd: mask unused zclient_broken()David Lamparter2015-04-211-0/+2
| | | | | | | this function is used by the currently not present zclient reconnect code. It'll be unmasked again when that code hits master. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* build: get rid of INCLUDES, use AM_CPPFLAGSDavid Lamparter2015-02-141-1/+1
| | | | | | | | | | | | INCLUDES in configure.ac was not used at all, and INCLUDES in Makefile.am is supposed to be AM_CPPFLAGS these days. Reduces warnings spewed during bootstrap/autoreconf. Signed-off-by: David Lamparter <equinox@opensourcerouting.org> Acked-by: Greg Troxel <gdt@ir.bbn.com> Acked-by: Feng Lu <lu.feng@6wind.com> Acked-by: Paul Jakma <paul@jakma.org>
* Revert "pimd: clear zclient-update: Reset zclient update connection to zebra ↵David Lamparter2015-02-043-14/+0
| | | | | | | | | | | | | | | daemon" This reverts commit 3456a80f5f8e6e44c30453bd92eabf5faf7ab25b. Conflicts: pimd/pim_zebra.c This depends on the zebra reconnect changes, which we're not picking up at this point. This revert is partial, only bumping out the reconnect-related changes. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* Revert "pim: Remove connected addresses on loss of zebra connection."David Lamparter2015-02-041-3/+1
| | | | | | | | | This reverts commit 96b6dfe98793549aca6a7cc77eaf0957b1168ed2. This depends on the zebra reconnect changes, which we're not picking up at this point. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* Revert "pimd: Explicitly restart zclient update connection."David Lamparter2015-02-041-4/+1
| | | | | | | | | This reverts commit 8150beed9a4f50a72696a65c1f40889ab65ad7ff. This depends on the zebra reconnect changes, which we're not picking up at this point. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* Revert "pimd: Revert: Explicitly restart zclient update connection."David Lamparter2015-02-041-0/+2
| | | | | | | | | This reverts commit 199f85ade39f751dd493fe011107736c9b168953. This depends on the zebra reconnect changes, which we're not picking up at this point. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* pimd: Log ifindex found for an interface when zebra lib reports a new ↵Everton Marques2015-02-043-10/+10
| | | | connected address.
* pimd: Fix configuration file reading upon startupDonald Sharp2015-02-041-6/+5
| | | | | | | | Without the fix, qpimd issues this error message: pim_if_add_vif: ifindex=0 < 1 on interface swp1 It happens because in pim_main.c:main() we are initializing zebra with pim_zebra_init() after we read in the configuration with vty_read_config(). See also: https://github.com/udhos/qpimd/issues/3
* pimd: Addition of Hello & Join-Prune message debug commandsBalaji.G2015-02-045-5/+68
| | | | | Separate "debug pim packets hello and Join-Prune" added to enable hello and Join-Prune debugs specifically
* pimd: show ip pim lan-prune-delay: Cosmetic.Everton Marques2015-02-041-2/+2
|
* pimd: Report del_oif() failure within igmp_source_forward_stop().Everton Marques2015-02-042-10/+23
|