mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 08:32:12 +00:00
babeld: Don't use an ifindex when installing IPv4 routes.
Stand-alone babeld installs routes using both a next-hop gateway and an interface index. Unfortunately, this doesn't work for IPv4 under Quagga. We now ignore the ifindex when installing IPv4 routes, which makes Babel work for IPv4 in prefix-based networks. Of course this breaks IPv4 mesh networks, unless you play some tricks with your interfaces' netmasks.
This commit is contained in:
parent
53b21956f6
commit
b6475ecb14
@ -157,7 +157,6 @@ static int
|
||||
kernel_route_add_v4(const unsigned char *pref, unsigned short plen,
|
||||
const unsigned char *gate, int ifindex, unsigned int metric)
|
||||
{
|
||||
unsigned int tmp_ifindex = ifindex; /* (for typing) */
|
||||
struct zapi_ipv4 api; /* quagga's communication system */
|
||||
struct prefix_ipv4 quagga_prefix; /* quagga's prefix */
|
||||
struct in_addr babel_prefix_addr; /* babeld's prefix addr */
|
||||
@ -180,12 +179,17 @@ kernel_route_add_v4(const unsigned char *pref, unsigned short plen,
|
||||
api.flags = 0;
|
||||
api.message = 0;
|
||||
api.safi = SAFI_UNICAST;
|
||||
|
||||
/* Unlike the native Linux and BSD interfaces, Quagga doesn't like
|
||||
there to be both and IPv4 nexthop and an ifindex. Omit the
|
||||
ifindex, and assume that the connected prefixes be set up
|
||||
correctly. */
|
||||
|
||||
SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP);
|
||||
api.nexthop_num = 1;
|
||||
api.nexthop = &nexthop_pointer;
|
||||
SET_FLAG(api.message, ZAPI_MESSAGE_IFINDEX);
|
||||
api.ifindex_num = 1;
|
||||
api.ifindex = &tmp_ifindex;
|
||||
api.ifindex_num = 0;
|
||||
|
||||
SET_FLAG(api.message, ZAPI_MESSAGE_METRIC);
|
||||
api.metric = metric;
|
||||
|
||||
@ -240,7 +244,6 @@ kernel_route_delete_v4(const unsigned char *pref, unsigned short plen,
|
||||
const unsigned char *gate, int ifindex,
|
||||
unsigned int metric)
|
||||
{
|
||||
unsigned int tmp_ifindex = ifindex; /* (for typing) */
|
||||
struct zapi_ipv4 api; /* quagga's communication system */
|
||||
struct prefix_ipv4 quagga_prefix; /* quagga's prefix */
|
||||
struct in_addr babel_prefix_addr; /* babeld's prefix addr */
|
||||
@ -266,9 +269,7 @@ kernel_route_delete_v4(const unsigned char *pref, unsigned short plen,
|
||||
SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP);
|
||||
api.nexthop_num = 1;
|
||||
api.nexthop = &nexthop_pointer;
|
||||
SET_FLAG(api.message, ZAPI_MESSAGE_IFINDEX);
|
||||
api.ifindex_num = 1;
|
||||
api.ifindex = &tmp_ifindex;
|
||||
api.ifindex_num = 0;
|
||||
SET_FLAG(api.message, ZAPI_MESSAGE_METRIC);
|
||||
api.metric = metric;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user