Changes allow ipv4 class E addresses and prefixes in the 240.0.0.0/4
range to be configured on interfaces, imported from the kernel routing
table and redistributed as connected routes in zebra by default.
Changes also fix routes with class E prefixes in kernel routing table
getting rejected by zebra during early daemon startup.
Drivin this change in default behavior are cloud providers (with
customers still using obsolete ipv4 protocol, i.e. Azure, AWS) running
out of ip space and abusing class E for addressing instances (announced
via BGP) over tunneling connections back to customers on premise
infrastructure.
Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
{
in_addr_t ip = ntohl(addr->s_addr);
+ if (IPV4_CLASS_E(ip))
+ return true;
+
if (IPV4_CLASS_D(ip))
return false;
- if (IPV4_NET0(ip) || IPV4_NET127(ip) || IPV4_CLASS_E(ip)) {
+ if (IPV4_NET0(ip) || IPV4_NET127(ip)) {
if (cmd_allow_reserved_ranges_get())
return true;
else
if (p->family == AF_INET) {
uint32_t addr;
- addr = p->u.prefix4.s_addr;
- addr = ntohl(addr);
+ addr = ntohl(p->u.prefix4.s_addr);
- if (IPV4_NET127(addr) || IN_CLASSD(addr)
- || IPV4_LINKLOCAL(addr))
+ if (IPV4_NET127(addr) || IN_CLASSD(addr) ||
+ (IPV4_LINKLOCAL(addr) && !IPV4_CLASS_E(addr)))
return 0;
}
if (p->family == AF_INET6) {