mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
To mimic what kernel routing subsystem does [1], add a local route entry for every dummy IP address. This helps with OVN testing multiple chassis on a single host and allows to run better unit tests for userspace tunnels without adding route entries manually. This is also the only way to add 'local' route entries that are required for testing 'local_ip' functionality with native tunnels in userspace datapath because route lookup will reject non-local source IPs. There seems to be no way to explicitly remove an IP address from netdev-dummy, hence no code path to handle route entry cleanup. The port itself can be removed, but our tests do not normally do that. Removal can be implemented later if necessary. [1]: http://linux-ip.net/html/routing-tables.html#routing-table-local "If the machine has several IP addresses on one Ethernet interface, there will be a route to each locally hosted IP in the local routing table. This is a normal side effect of bringing up an IP address on an interface under linux." Acked-by: Eelco Chaudron <echaudro@redhat.com> Signed-off-by: Ihar Hrachyshka <ihrachys@redhat.com> Co-authored-by: Ilya Maximets <i.maximets@ovn.org> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2014 Nicira, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef OVS_TNL_ROUTER_H
|
|
#define OVS_TNL_ROUTER_H 1
|
|
|
|
#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
|
|
#include "util.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
bool ovs_router_lookup(uint32_t mark, const struct in6_addr *ip_dst,
|
|
char out_dev[],
|
|
struct in6_addr *src, struct in6_addr *gw);
|
|
void ovs_router_init(void);
|
|
void ovs_router_insert(uint32_t mark, const struct in6_addr *ip_dst,
|
|
uint8_t plen, bool local,
|
|
const char output_bridge[], const struct in6_addr *gw,
|
|
const struct in6_addr *prefsrc);
|
|
void ovs_router_force_insert(uint32_t mark, const struct in6_addr *ip_dst,
|
|
uint8_t plen, bool local,
|
|
const char output_bridge[],
|
|
const struct in6_addr *gw,
|
|
const struct in6_addr *prefsrc);
|
|
void ovs_router_flush(void);
|
|
|
|
void ovs_router_disable_system_routing_table(void);
|
|
|
|
int ovs_router_get_netdev_source_address(const struct in6_addr *ip6_dst,
|
|
const char output_bridge[],
|
|
struct in6_addr *psrc);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|