Commit 1e637c74 authored by Jan Engelhardt's avatar Jan Engelhardt Committed by David S. Miller

[IPV4]: Enable use of 240/4 address space.

This short patch modifies the IPv4 networking to enable use of the
240.0.0.0/4 (aka "class-E") address space as propsed in the internet
draft draft-fuller-240space-00.txt.
Signed-off-by: default avatarJan Engelhardt <jengelh@computergmbh.de>
Acked-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 96750162
...@@ -262,9 +262,10 @@ static inline bool ipv4_is_local_multicast(__be32 addr) ...@@ -262,9 +262,10 @@ static inline bool ipv4_is_local_multicast(__be32 addr)
return (addr & htonl(0xffffff00)) == htonl(0xe0000000); return (addr & htonl(0xffffff00)) == htonl(0xe0000000);
} }
static inline bool ipv4_is_badclass(__be32 addr) static inline bool ipv4_is_lbcast(__be32 addr)
{ {
return (addr & htonl(0xf0000000)) == htonl(0xf0000000); /* limited broadcast */
return addr == INADDR_BROADCAST;
} }
static inline bool ipv4_is_zeronet(__be32 addr) static inline bool ipv4_is_zeronet(__be32 addr)
......
...@@ -262,7 +262,7 @@ static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr) ...@@ -262,7 +262,7 @@ static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr)
ipv4_is_private_172(addr) || ipv4_is_test_192(addr) || ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) || ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
ipv4_is_test_198(addr) || ipv4_is_multicast(addr) || ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
ipv4_is_badclass(addr)) ? 0x00 : 0x02; ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
eui[1] = 0; eui[1] = 0;
eui[2] = 0x5E; eui[2] = 0x5E;
eui[3] = 0xFE; eui[3] = 0xFE;
......
...@@ -2266,7 +2266,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev) ...@@ -2266,7 +2266,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev)
while (ipv4_is_loopback(s) || while (ipv4_is_loopback(s) ||
ipv4_is_multicast(s) || ipv4_is_multicast(s) ||
ipv4_is_badclass(s) || ipv4_is_lbcast(s) ||
ipv4_is_zeronet(s) || ipv4_is_zeronet(s) ||
ipv4_is_local_multicast(s)) { ipv4_is_local_multicast(s)) {
t = random32() % (imx - imn) + imn; t = random32() % (imx - imn) + imn;
......
...@@ -176,7 +176,7 @@ static inline unsigned __inet_dev_addr_type(struct net *net, ...@@ -176,7 +176,7 @@ static inline unsigned __inet_dev_addr_type(struct net *net,
unsigned ret = RTN_BROADCAST; unsigned ret = RTN_BROADCAST;
struct fib_table *local_table; struct fib_table *local_table;
if (ipv4_is_zeronet(addr) || ipv4_is_badclass(addr)) if (ipv4_is_zeronet(addr) || ipv4_is_lbcast(addr))
return RTN_BROADCAST; return RTN_BROADCAST;
if (ipv4_is_multicast(addr)) if (ipv4_is_multicast(addr))
return RTN_MULTICAST; return RTN_MULTICAST;
......
...@@ -1154,7 +1154,7 @@ void ip_rt_redirect(__be32 old_gw, __be32 daddr, __be32 new_gw, ...@@ -1154,7 +1154,7 @@ void ip_rt_redirect(__be32 old_gw, __be32 daddr, __be32 new_gw,
return; return;
if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev) if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev)
|| ipv4_is_multicast(new_gw) || ipv4_is_badclass(new_gw) || ipv4_is_multicast(new_gw) || ipv4_is_lbcast(new_gw)
|| ipv4_is_zeronet(new_gw)) || ipv4_is_zeronet(new_gw))
goto reject_redirect; goto reject_redirect;
...@@ -1634,7 +1634,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr, ...@@ -1634,7 +1634,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (in_dev == NULL) if (in_dev == NULL)
return -EINVAL; return -EINVAL;
if (ipv4_is_multicast(saddr) || ipv4_is_badclass(saddr) || if (ipv4_is_multicast(saddr) || ipv4_is_lbcast(saddr) ||
ipv4_is_loopback(saddr) || skb->protocol != htons(ETH_P_IP)) ipv4_is_loopback(saddr) || skb->protocol != htons(ETH_P_IP))
goto e_inval; goto e_inval;
...@@ -1891,7 +1891,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr, ...@@ -1891,7 +1891,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
by fib_lookup. by fib_lookup.
*/ */
if (ipv4_is_multicast(saddr) || ipv4_is_badclass(saddr) || if (ipv4_is_multicast(saddr) || ipv4_is_lbcast(saddr) ||
ipv4_is_loopback(saddr)) ipv4_is_loopback(saddr))
goto martian_source; goto martian_source;
...@@ -1904,7 +1904,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr, ...@@ -1904,7 +1904,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (ipv4_is_zeronet(saddr)) if (ipv4_is_zeronet(saddr))
goto martian_source; goto martian_source;
if (ipv4_is_badclass(daddr) || ipv4_is_zeronet(daddr) || if (ipv4_is_lbcast(daddr) || ipv4_is_zeronet(daddr) ||
ipv4_is_loopback(daddr)) ipv4_is_loopback(daddr))
goto martian_destination; goto martian_destination;
...@@ -2125,7 +2125,7 @@ static inline int __mkroute_output(struct rtable **result, ...@@ -2125,7 +2125,7 @@ static inline int __mkroute_output(struct rtable **result,
res->type = RTN_BROADCAST; res->type = RTN_BROADCAST;
else if (ipv4_is_multicast(fl->fl4_dst)) else if (ipv4_is_multicast(fl->fl4_dst))
res->type = RTN_MULTICAST; res->type = RTN_MULTICAST;
else if (ipv4_is_badclass(fl->fl4_dst) || ipv4_is_zeronet(fl->fl4_dst)) else if (ipv4_is_lbcast(fl->fl4_dst) || ipv4_is_zeronet(fl->fl4_dst))
return -EINVAL; return -EINVAL;
if (dev_out->flags & IFF_LOOPBACK) if (dev_out->flags & IFF_LOOPBACK)
...@@ -2276,7 +2276,7 @@ static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp) ...@@ -2276,7 +2276,7 @@ static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp)
if (oldflp->fl4_src) { if (oldflp->fl4_src) {
err = -EINVAL; err = -EINVAL;
if (ipv4_is_multicast(oldflp->fl4_src) || if (ipv4_is_multicast(oldflp->fl4_src) ||
ipv4_is_badclass(oldflp->fl4_src) || ipv4_is_lbcast(oldflp->fl4_src) ||
ipv4_is_zeronet(oldflp->fl4_src)) ipv4_is_zeronet(oldflp->fl4_src))
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment