Skip to content

Commit

Permalink
Merge pull request #3055 from donaldsharp/zebra_5.0
Browse files Browse the repository at this point in the history
zebra: Send correct default vrf tableid for MROUTE stats
  • Loading branch information
mwinter-osr committed Sep 20, 2018
2 parents 1cf5f01 + 57a1d09 commit 5ed0cb8
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion zebra/rt_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1667,6 +1667,7 @@ static int netlink_route_multipath(int cmd, struct prefix *p,

int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in)
{
uint32_t actual_table;
int suc = 0;
struct mcast_route_data *mr = (struct mcast_route_data *)in;
struct {
Expand All @@ -1693,7 +1694,23 @@ int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in)
addattr_l(&req.n, sizeof(req), RTA_OIF, &mroute->ifindex, 4);
addattr_l(&req.n, sizeof(req), RTA_SRC, &mroute->sg.src.s_addr, 4);
addattr_l(&req.n, sizeof(req), RTA_DST, &mroute->sg.grp.s_addr, 4);
addattr_l(&req.n, sizeof(req), RTA_TABLE, &zvrf->table_id, 4);
/*
* What?
*
* So during the namespace cleanup we started storing
* the zvrf table_id for the default table as RT_TABLE_MAIN
* which is what the normal routing table for ip routing is.
* This change caused this to break our lookups of sg data
* because prior to this change the zvrf->table_id was 0
* and when the pim multicast kernel code saw a 0,
* it was auto-translated to RT_TABLE_DEFAULT. But since
* we are now passing in RT_TABLE_MAIN there is no auto-translation
* and the kernel goes screw you and the delicious cookies you
* are trying to give me. So now we have this little hack.
*/
actual_table = (zvrf->table_id == RT_TABLE_MAIN) ? RT_TABLE_DEFAULT :
zvrf->table_id;
addattr_l(&req.n, sizeof(req), RTA_TABLE, &actual_table, 4);

suc = netlink_talk(netlink_route_change_read_multicast, &req.n,
&zns->netlink_cmd, zns, 0);
Expand Down

0 comments on commit 5ed0cb8

Please sign in to comment.