mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 10:04:18 +00:00
Merge pull request #384 from donaldsharp/dr2
Add source of route as protocol string in ip route pushed into kernel
This commit is contained in:
commit
77e17a6ae5
1
debian/frr.dirs
vendored
1
debian/frr.dirs
vendored
@ -1,5 +1,6 @@
|
|||||||
etc/logrotate.d/
|
etc/logrotate.d/
|
||||||
etc/frr/
|
etc/frr/
|
||||||
|
etc/iproute2/rt_protos.d/
|
||||||
usr/share/doc/frr/
|
usr/share/doc/frr/
|
||||||
usr/share/doc/frr/examples/
|
usr/share/doc/frr/examples/
|
||||||
usr/share/lintian/overrides/
|
usr/share/lintian/overrides/
|
||||||
|
1
debian/frr.install
vendored
1
debian/frr.install
vendored
@ -18,5 +18,6 @@ usr/share/man/man8/isisd.8
|
|||||||
usr/share/man/man8/watchfrr.8
|
usr/share/man/man8/watchfrr.8
|
||||||
usr/share/snmp/mibs/
|
usr/share/snmp/mibs/
|
||||||
cumulus/etc/* etc/
|
cumulus/etc/* etc/
|
||||||
|
tools/etc/* etc/
|
||||||
tools/*.service lib/systemd/system
|
tools/*.service lib/systemd/system
|
||||||
debian/frr.conf usr/lib/tmpfiles.d
|
debian/frr.conf usr/lib/tmpfiles.d
|
||||||
|
8
tools/etc/iproute2/rt_protos.d/frr.conf
Normal file
8
tools/etc/iproute2/rt_protos.d/frr.conf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Additional protocol strings defined by frr for each of its daemons
|
||||||
|
|
||||||
|
186 bgp
|
||||||
|
187 isis
|
||||||
|
188 ospf
|
||||||
|
189 rip
|
||||||
|
190 ripng
|
||||||
|
191 static
|
@ -532,8 +532,15 @@ case "$1" in
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$dmn" -o "$dmn" = "zebra" ]; then
|
if [ -z "$dmn" -o "$dmn" = "zebra" ]; then
|
||||||
echo "Removing all routes made by zebra."
|
echo "Removing all routes made by FRR."
|
||||||
|
ip route flush proto bgp
|
||||||
|
ip route flush proto ospf
|
||||||
|
ip route flush proto static
|
||||||
|
ip route flush proto rip
|
||||||
|
ip route flush proto ripng
|
||||||
ip route flush proto zebra
|
ip route flush proto zebra
|
||||||
|
ip route flush proto isis
|
||||||
|
|
||||||
else
|
else
|
||||||
[ -n "$dmn" ] && eval "${dmn/-/_}=0"
|
[ -n "$dmn" ] && eval "${dmn/-/_}=0"
|
||||||
start_watchfrr
|
start_watchfrr
|
||||||
|
@ -100,6 +100,11 @@ static const struct message rtproto_str[] = {
|
|||||||
{RTPROT_BIRD, "BIRD"},
|
{RTPROT_BIRD, "BIRD"},
|
||||||
#endif /* RTPROT_BIRD */
|
#endif /* RTPROT_BIRD */
|
||||||
{RTPROT_MROUTED, "mroute"},
|
{RTPROT_MROUTED, "mroute"},
|
||||||
|
{RTPROT_BGP, "BGP"},
|
||||||
|
{RTPROT_OSPF, "OSPF"},
|
||||||
|
{RTPROT_ISIS, "IS-IS"},
|
||||||
|
{RTPROT_RIP, "RIP"},
|
||||||
|
{RTPROT_RIPNG, "RIPNG"},
|
||||||
{0, NULL}
|
{0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -103,6 +103,47 @@ struct gw_family_t
|
|||||||
union g_addr gate;
|
union g_addr gate;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline int is_selfroute(int proto)
|
||||||
|
{
|
||||||
|
if ((proto == RTPROT_BGP) || (proto == RTPROT_OSPF) ||
|
||||||
|
(proto == RTPROT_STATIC) || (proto == RTPROT_ZEBRA) ||
|
||||||
|
(proto == RTPROT_ISIS) || (proto == RTPROT_RIPNG)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_rt_proto(int proto)
|
||||||
|
{
|
||||||
|
switch (proto) {
|
||||||
|
case ZEBRA_ROUTE_BGP:
|
||||||
|
proto = RTPROT_BGP;
|
||||||
|
break;
|
||||||
|
case ZEBRA_ROUTE_OSPF:
|
||||||
|
case ZEBRA_ROUTE_OSPF6:
|
||||||
|
proto = RTPROT_OSPF;
|
||||||
|
break;
|
||||||
|
case ZEBRA_ROUTE_STATIC:
|
||||||
|
proto = RTPROT_STATIC;
|
||||||
|
break;
|
||||||
|
case ZEBRA_ROUTE_ISIS:
|
||||||
|
proto = RTPROT_ISIS;
|
||||||
|
break;
|
||||||
|
case ZEBRA_ROUTE_RIP:
|
||||||
|
proto = RTPROT_RIP;
|
||||||
|
break;
|
||||||
|
case ZEBRA_ROUTE_RIPNG:
|
||||||
|
proto = RTPROT_RIPNG;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
proto = RTPROT_ZEBRA;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return proto;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Pending: create an efficient table_id (in a tree/hash) based lookup)
|
Pending: create an efficient table_id (in a tree/hash) based lookup)
|
||||||
*/
|
*/
|
||||||
@ -171,7 +212,7 @@ netlink_route_change_read_unicast (struct sockaddr_nl *snl, struct nlmsghdr *h,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!startup &&
|
if (!startup &&
|
||||||
rtm->rtm_protocol == RTPROT_ZEBRA &&
|
is_selfroute (rtm->rtm_protocol) &&
|
||||||
h->nlmsg_type == RTM_NEWROUTE)
|
h->nlmsg_type == RTM_NEWROUTE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -196,7 +237,7 @@ netlink_route_change_read_unicast (struct sockaddr_nl *snl, struct nlmsghdr *h,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Route which inserted by Zebra. */
|
/* Route which inserted by Zebra. */
|
||||||
if (rtm->rtm_protocol == RTPROT_ZEBRA)
|
if (is_selfroute(rtm->rtm_protocol))
|
||||||
flags |= ZEBRA_FLAG_SELFROUTE;
|
flags |= ZEBRA_FLAG_SELFROUTE;
|
||||||
|
|
||||||
if (tb[RTA_OIF])
|
if (tb[RTA_OIF])
|
||||||
@ -1137,7 +1178,7 @@ netlink_route_multipath (int cmd, struct prefix *p, struct prefix *src_p,
|
|||||||
req.r.rtm_family = family;
|
req.r.rtm_family = family;
|
||||||
req.r.rtm_dst_len = p->prefixlen;
|
req.r.rtm_dst_len = p->prefixlen;
|
||||||
req.r.rtm_src_len = src_p ? src_p->prefixlen : 0;
|
req.r.rtm_src_len = src_p ? src_p->prefixlen : 0;
|
||||||
req.r.rtm_protocol = RTPROT_ZEBRA;
|
req.r.rtm_protocol = get_rt_proto(rib->type);
|
||||||
req.r.rtm_scope = RT_SCOPE_UNIVERSE;
|
req.r.rtm_scope = RT_SCOPE_UNIVERSE;
|
||||||
|
|
||||||
if ((rib->flags & ZEBRA_FLAG_BLACKHOLE) || (rib->flags & ZEBRA_FLAG_REJECT))
|
if ((rib->flags & ZEBRA_FLAG_BLACKHOLE) || (rib->flags & ZEBRA_FLAG_REJECT))
|
||||||
|
@ -28,6 +28,14 @@
|
|||||||
|
|
||||||
#define NL_DEFAULT_ROUTE_METRIC 20
|
#define NL_DEFAULT_ROUTE_METRIC 20
|
||||||
|
|
||||||
|
/* Additional protocol strings to push into routes */
|
||||||
|
#define RTPROT_BGP 186
|
||||||
|
#define RTPROT_ISIS 187
|
||||||
|
#define RTPROT_OSPF 188
|
||||||
|
#define RTPROT_RIP 189
|
||||||
|
#define RTPROT_RIPNG 190
|
||||||
|
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
clear_nhlfe_installed (zebra_lsp_t *lsp);
|
clear_nhlfe_installed (zebra_lsp_t *lsp);
|
||||||
extern int
|
extern int
|
||||||
|
Loading…
Reference in New Issue
Block a user