summaryrefslogtreecommitdiffstats
path: root/zebra
Commit message (Collapse)AuthorAgeFilesLines
* zebra: Fix route deletion on *BSDTimo Teräs2016-03-081-22/+21
| | | | | | | | | Fix for not handling RTM_CHANGE correctly. This patch change it to delete/add instead. Using RTM_CHANGE on kernels where it works is better, but is left as an exercise for developer who has access and will to fix it on *BSD. [ed note: collaboration with Martin Winter]
* zebra, bgpd: Fixup MULTIPATH_NUM usage to not consider 0Donald Sharp2016-02-262-5/+4
| | | | | | | | The code has spots where MULTIPATH_NUM set to 0 is equal to 64. Now that MULTIPATH_NUM is set from the makefile to never be 0, remove the code that depends on this. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* build: Rework how MULTIPATH_NUM is delivered to buildDonald Sharp2016-02-261-1/+1
| | | | | | | | | | | | | | Changes made here: 1) MULTIPATH_NUM will never be 0. If user specifies --enable-multipath=0 then this translates to MULTIPATH_NUM being set to 64 inside of the build system. 2) Move MULTIPATH_NUM from a Makefile construct to a config.h construct. 3) Allowed MULTIPATH_NUM to be a number > 99 but < 1000 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* *: use an ifindex_t type, defined in lib/if.h, for ifindex valuesPaul Jakma2016-02-269-26/+29
|
* lib, zebra: unify link layer type and hardware address handlingTimo Teräs2016-02-266-46/+114
| | | | | | | | | | | | | | | | This removes the BSD specific usage of struct sockaddr_dl hardware address. This unifies to use explict hw_addr member for the address, and zebra specific enumeration for the link layer type. Additionally the zapi is updated to never send platform specific structures over the wire, but the ll_type along with hw_addr_len and hw_addr are now sent for all platforms. Based on initial work by Paul Jakma. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: remove metric from kernelTimo Teräs2016-02-262-29/+12
| | | | | | | | | | It simplifies things as we can do atomic replace of route prefix. And it seems there's some race condition somewhere that can result in an incorrect change request leaving prefixes in kernel when they were intended to be replaced/deleted. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: support FIB override routesTimo Teräs2016-02-265-31/+70
| | | | | | | | | | | | | | | | FIB override routes are for routing protocols that establish shortcut routes, or establish point-to-point routes that should not be redistributed. Namely this is useful NHRP daemon to come. Zebra is extended to select two entries from RIB the "best" entry from routing protocols, and the FIB entry to install to kernel. FIB override routes are never selected as best entry, and thus are never adverticed to other routing daemons. The best FIB override, or if it does not exist the otherwise best RIB is selected as FIB entry to be installed. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: use link scope for interface routesTimo Teräs2016-02-262-16/+11
| | | | | | | | | | In linux, 'scope' is a hint of distance of the IP. And this is evident from the fact that only lower scope can be used as recursive via lookup result. This changes all interface routes scope to link so kernel will allow regular routes to use it as via. Then we do not need to use the 'onlink' attribute. Signed-off-by: Timo Teräs <timo.teras@iki.fi>
* zebra: atomic FIB updatesTimo Teräs2016-02-266-307/+171
| | | | | | | | | | | This commit updates the kernel API so that route changes are atomically updated using change/replaces messages instead of first sending a withdraw followed with update. Same for zclient updates, changes are sent as single ADD instead of DELETE + ADD. Signed-off-by: Timo Teräs <timo.teras@iki.fi>
* zebra: additional redistribute related loggingLou Berger2016-02-261-6/+12
| | | | | Signed-off-by: Lou Berger <lberger@labn.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* zebra: make RTF_LLINFO optional to fix FreeBSDLou Berger2016-02-261-0/+2
| | | | | Signed-off-by: Lou Berger <lberger@labn.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* zebra: wire up "debug zebra packet detail"Lou Berger2016-02-261-2/+3
| | | | | | | | There was no way to actually set ZEBRA_DEBUG_DETAIL, even though some debug output was conditional to it. Add CLI command. Signed-off-by: Lou Berger <lberger@labn.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* zebra: Fix solaris build issueDonald Sharp2015-12-091-1/+1
| | | | | | | The number of parameters to rib_add_ipv4 has been increased. Submitter of original patch failed to modify solaris code path. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Fix non usage of VRF_DEFAULTDonald Sharp2015-12-081-1/+1
| | | | | | A vrf_id was being set to 0 instead of VRF_DEFAULT Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Cleanup RTADV defineDonald Sharp2015-12-086-37/+24
| | | | | | | | | | The RTADV define was not being set correctly or consistently. Make the code consistent with our HAVE_IPV6 define. If the user wants to explicitly turn it off then they should run --disable-rtadv from the configure cli Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Fix change of distance on ipv6 route creating duplicate routesDonald Sharp2015-12-081-4/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If you enter: ipv6 route 2002:44:44:44::44/128 swp1 4 ipv6 route 2002:44:44:44::44/128 swp1 99 You get: host-111# show ipv6 route Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table, > - selected route, * - FIB route S 2002:44:44:44::44/128 [99/0] is directly connected, swp1 S>* 2002:44:44:44::44/128 [4/0] is directly connected, swp1 This problem is fixed in the ipv4 code path. Copying the same code from the ipv4 into the ipv6 code path fixes the issue. With the fix: host-111(config)# ipv6 route 2002:44:44:44::44/128 swp1 4 host-111(config)# do show ipv6 route Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table, > - selected route, * - FIB route S>* 2002:44:44:44::44/128 [4/0] is directly connected, swp1 C * fe80::/64 is directly connected, swp1 C>* fe80::/64 is directly connected, eth0 host-111(config)# ipv6 route 2002:44:44:44::44/128 swp1 99 host-111(config)# do show ipv6 route Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table, > - selected route, * - FIB route S>* 2002:44:44:44::44/128 [99/0] is directly connected, swp1 C * fe80::/64 is directly connected, swp1 C>* fe80::/64 is directly connected, eth0 host-111(config)# Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Combine static_uninstall_ipv[4|6] into one functionDonald Sharp2015-12-081-65/+4
| | | | Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: combine static_ipv[4|6]_nexthop_same into one functionDonald Sharp2015-12-081-22/+16
| | | | | | Combine the static_ipv[4|6]_nexthop_same into static_nexthop_same. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Combine static_install_ipv[4|6]Donald Sharp2015-12-081-100/+41
| | | | | | | Combine the static_install_ipv[4|6] function calls into static_install_route. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Remove HAVE_IPV6 from rib.h and zebra_rib.cDonald Sharp2015-12-082-19/+4
| | | | Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Collapse struct static_ipv[4|6] into struct static_routeDonald Sharp2015-12-083-93/+60
| | | | | | | | The 'struct static_ipv4' and 'struct static_ipv6' structures are essentially the same. Collapse them into one data structure 'struct static_route'. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: implement per-route mtu handlingTimo Teräs2015-12-087-17/+84
| | | | | | | | This commits allow overriding MTU using netlink attributes on per-route basis. This is useful for routing protocols that can advertice prefix specific MTUs between routers (e.g. NHRP). Signed-off-by: Timo Teräs <timo.teras@iki.fi>
* zebra: make ZEBRA_FLAG_CHANGED internal statusTimo Teräs2015-12-082-4/+5
| | | | | | | | | This flag is used internally in zebra only. And it makes no sense to expose it over the zclient API, as having it set from client could corrupt the internal state. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: fix rtadv detectionTimo Teräs2015-12-081-6/+2
| | | | | | | | | The GLIBC macro tests were just plain wrong. Glibc 2.1 is ancient and the support should be detected via configure.ac test, not macro test. Build with HAVE_RTADV but !RTADV is broke after vrf, so for now, just define RTADV always if HAVE_RTADV is there. Signed-off-by: Timo Teräs <timo.teras@iki.fi>
* Merge 'patch-tracking/4/proposed/netdef-solaris' into acceptedPaul Jakma2015-10-287-17/+62
|\
| * zebra/if_ioctl_solaris: Make foo staticDavid Lamparter2015-10-161-2/+2
| | | | | | | | | | | | make interface_ioctl_ioctl() and if_get_index() static Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * zebra/rt_socket: Fix warningsDavid Lamparter2015-10-161-0/+6
| | | | | | | | | | | | Fix warning about unused sin_masklen / sin6_masklen Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * zebra/rtread_getmsg: fix sign warningsDavid Lamparter2015-10-161-3/+3
| | | | | | | | Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * solaris: more warnings fixedDavid Lamparter2015-10-161-6/+9
| | | | | | | | Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * solaris: no ROUNDUPDavid Lamparter2015-10-161-0/+6
| | | | | | | | Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * zebra/ioctl_solaris: Fix use of prefix2str in if_prefix_add/delete_ipv6Martin Winter2015-10-161-2/+2
| | | | | | | | | | | | | | First argument of prefix2str pointed to ifc->address->prefix, but no prefix exists in address. Should have been ifc->address. Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
| * zebra/solaris: fix uninitialised varsDavid Lamparter2015-10-161-1/+1
| | | | | | | | Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * build/solaris: create ioctl_solaris.hDavid Lamparter2015-10-164-3/+33
| | | | | | | | Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* | lib: zclient.c remove extern struct thread_master *Donald Sharp2015-10-271-1/+3
|/ | | | | | | | | | | | 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>
* Fixed if_add_update possible null dereferenceMorgan Stewart2015-09-241-0/+2
| | | | | | | | | Coverity Scan #1221454 In zebra/interface.c if_data could be null dereferenced without early check. Signed-off-by: Morgan Stewart <morgan@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: Fix leaked sockets in rtadv.cMorgan Stewart2015-09-241-6/+24
| | | | | | | | Coverity Scan #709790 In zebra/rtadv.c: rtadv_make_socket leaks socket for error cases. Added lines to close the socket for each error case or return. Signed-off-by: Morgan Stewart <morgan@cumulusnetworks.com>
* zebra: rib->nexthop_num is double incrementedDonald Sharp2015-09-241-2/+0
| | | | | | | | | | While reading linux kernel netlink messages, rib->nexthop_num is incremented in the read loop as well as the underlying nexthop_add() function call. This number should only be incremented in one spot. Removing the increment from the read loop and allowing the underlying code to track this data as it is already. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* zebra: fix addr sent in ZEBRA_IPV6_NEXTHOP_LOOKUPHiroshi Yokoi2015-09-241-1/+1
| | | | | | | | | I found that zebra doesn't set correct IPv6 address in its result because of using *addr's address. Although I'm using 0.99.22, the latest version has also use "&addr". Shouldn't it use "addr"? Signed-off-by: Hiroshi Yokoi <hiroshi.yokoi.0313@gmail.com> Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
* 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.
* Removal of 'show ip mroute'Donald Sharp2015-08-041-92/+0
| | | | | | | | | | The 'show ip mroute' in zebra_vty.c collided with the 'show ip mroute' command in pim_cmd.c. The 'show ip rpf' command is functionally equivalent to the zebra_vty.c 'show ip mroute'. Therefore remove the 'show ip mroute' command in zebra_vty.c. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Fix _netlink_route_debug messageKaloyan Kovachev2015-07-291-0/+1
|
* *: add VRF ID in the API message headerFeng Lu2015-06-036-104/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* zebra, lib/memtypes.c: the netlink sockets work per VRFFeng Lu2015-06-0316-120/+228
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch lets the netlink sockets work per VRF. * The definition of "struct nlsock" is moved into zebra/rib.h. * The previous global variables "netlink" and "netlink_cmd" now become the members of "struct zebra_vrf", and are initialized in zebra_vrf_alloc(). * All relative functions now work for a specific VRF, by adding a new parameter which specifies the working VRF, except those functions in which the VRF ID can be obtained from the interface. * kernel_init(), interface_list() and route_read() are now also working per VRF, and moved from main() to zebra_vrf_enable(). * A new function kernel_terminate() is added to release the netlink sockets. It is called from zebra_vrf_disable(). * Correct VRF ID, instead of the previous VRF_DEFAULT, are now passed to the functions of processing interfaces or route entries. 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>
* zebra: fix VRF code for *BSDDavid Lamparter2015-06-021-1/+1
| | | | | | | There seems to be no rtm_table in struct rt_msghdr, at least on the systems I have access to... Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* zebra: maintain RTADV per VRFFeng Lu2015-06-025-68/+121
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This moves the global variable "rtadv" into the "struct zebra_vrf", so that RTADV feature can work per VRF. * rtadv.c/rtadv.h: Add a proper parameter to the functions so that the entity of the "struct zebra_vrf" and interfaces can be obtained from the specified VRF. The old rtadv_init() is splitted into: - rtadv_cmd_init(): it installs the RTADV commands; is called from main(); - new rtadv_init(): it creates the socket; is called from zebra_vrf_enable(). rtadv_terminate() is added to stop the threads, close the socket and clear the counters. It is called from zebra_vrf_disable(). rtadv_make_socket() now calls vrf_socket() to create a socket in the VRF. * interface.h and rib.h: define the macro RTADV. * main.c: according changes, refer to rtadv.c. 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>
* zebra: add hooks upon enabling / disabling a VRFFeng Lu2015-06-024-1/+79
| | | | | | | | | | | | | | | zebra_vrf_enable() is the callback for VRF_ENABLE_HOOK. It presently needs do nothing. zebra_vrf_disable() is the callback for VRF_DISABLE_HOOK. It presently withdraws routes, shuts down interfaces, and clears the router-id candidates in that VRF. 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>
* zebra: maintain the router-id per VRFFeng Lu2015-06-026-50/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A router may need different identifier among the VRFs. So move the maintenance of router-id per VRF. * rib.h: Move the previous global variables in router-id.c into the "struct zebra_vrf": - struct list _rid_all_sorted_list/*rid_all_sorted_list - struct list _rid_lo_sorted_list/*rid_lo_sorted_list - struct prefix rid_user_assigned * router-id.c/router-id.h: A new parameter "vrf_id" is added to all the router-id APIs. Their operations are done only within the specified VRF. A new command "router-id A.B.C.D vrf N" is added to allow manual router-id for any VRF. The old router_id_init() function is splitted into two: - router_id_cmd_init(): it only installs the commands - router_id_init(): this new one initializes the variables for a specified VRF * zebra_rib.c: Add new functions zebra_vrf_get/lookup() called from router-id.c. * main.c: Replace router_id_init() with router_id_cmd_init() and call the new router_id_init() in zebra_vrf_new(). 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>
* zebra: configure static routes in any VRFFeng Lu2015-06-023-122/+935
| | | | | | | | | | | | | | | | | | | | | | | Introduce new commands to configure static routes in any VRF, by appending the old static route commands with a new parameter "vrf N". A new parameter "const char *vrf_id_str" is added to the functions zebra_static_ipv4() and static_ipv6_func() to get the configured VRF ID. A new member "vrf_id" is added to the "struct static_ipv4" and "struct static_ipv6", indicating which VRF this static route is configured in. But till now, no interface can exist in any non-default VRF. So these static routes in non-default VRFs are kept inactive. 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>
* zebra: lookup the address in all VRFs when set the route-map rule "set src"Feng Lu2015-06-021-7/+13
| | | | | | | | | | | | | When configuring the route-map rule "set src A.B.C.D", it checked whether the source address exists on some interface. Now it checks the source address throughout all 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: Vincent JARDIN <vincent.jardin@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* zebra: let the route-map rule "match interface" work for VRFsFeng Lu2015-06-023-3/+16
| | | | | | | | | | | | | | Introduce a new "struct nexthop_vrfid" to specify a nexthop together with the VRF ID it belongs to. Thus in route_match_interface(), we can lookup the interface from the correct VRF. 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>