mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 03:33:43 +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/frr/
|
||||
etc/iproute2/rt_protos.d/
|
||||
usr/share/doc/frr/
|
||||
usr/share/doc/frr/examples/
|
||||
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/snmp/mibs/
|
||||
cumulus/etc/* etc/
|
||||
tools/etc/* etc/
|
||||
tools/*.service lib/systemd/system
|
||||
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
|
||||
|
||||
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 isis
|
||||
|
||||
else
|
||||
[ -n "$dmn" ] && eval "${dmn/-/_}=0"
|
||||
start_watchfrr
|
||||
|
@ -100,6 +100,11 @@ static const struct message rtproto_str[] = {
|
||||
{RTPROT_BIRD, "BIRD"},
|
||||
#endif /* RTPROT_BIRD */
|
||||
{RTPROT_MROUTED, "mroute"},
|
||||
{RTPROT_BGP, "BGP"},
|
||||
{RTPROT_OSPF, "OSPF"},
|
||||
{RTPROT_ISIS, "IS-IS"},
|
||||
{RTPROT_RIP, "RIP"},
|
||||
{RTPROT_RIPNG, "RIPNG"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
|
@ -103,6 +103,47 @@ struct gw_family_t
|
||||
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)
|
||||
*/
|
||||
@ -171,7 +212,7 @@ netlink_route_change_read_unicast (struct sockaddr_nl *snl, struct nlmsghdr *h,
|
||||
return 0;
|
||||
|
||||
if (!startup &&
|
||||
rtm->rtm_protocol == RTPROT_ZEBRA &&
|
||||
is_selfroute (rtm->rtm_protocol) &&
|
||||
h->nlmsg_type == RTM_NEWROUTE)
|
||||
return 0;
|
||||
|
||||
@ -196,7 +237,7 @@ netlink_route_change_read_unicast (struct sockaddr_nl *snl, struct nlmsghdr *h,
|
||||
}
|
||||
|
||||
/* Route which inserted by Zebra. */
|
||||
if (rtm->rtm_protocol == RTPROT_ZEBRA)
|
||||
if (is_selfroute(rtm->rtm_protocol))
|
||||
flags |= ZEBRA_FLAG_SELFROUTE;
|
||||
|
||||
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_dst_len = p->prefixlen;
|
||||
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;
|
||||
|
||||
if ((rib->flags & ZEBRA_FLAG_BLACKHOLE) || (rib->flags & ZEBRA_FLAG_REJECT))
|
||||
|
@ -28,6 +28,14 @@
|
||||
|
||||
#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
|
||||
clear_nhlfe_installed (zebra_lsp_t *lsp);
|
||||
extern int
|
||||
|
Loading…
Reference in New Issue
Block a user