Commit c4c877b2 authored by Daniel Borkmann's avatar Daniel Borkmann Committed by David S. Miller

net: Consolidate common blackhole dst ops

Move generic blackhole dst ops to the core and use them from both
ipv4_dst_blackhole_ops and ip6_dst_blackhole_ops where possible. No
functional change otherwise. We need these also in other locations
and having to define them over and over again is not great.
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 05a59d79
...@@ -550,4 +550,15 @@ static inline void skb_dst_update_pmtu_no_confirm(struct sk_buff *skb, u32 mtu) ...@@ -550,4 +550,15 @@ static inline void skb_dst_update_pmtu_no_confirm(struct sk_buff *skb, u32 mtu)
dst->ops->update_pmtu(dst, NULL, skb, mtu, false); dst->ops->update_pmtu(dst, NULL, skb, mtu, false);
} }
struct dst_entry *dst_blackhole_check(struct dst_entry *dst, u32 cookie);
void dst_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu, bool confirm_neigh);
void dst_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb);
u32 *dst_blackhole_cow_metrics(struct dst_entry *dst, unsigned long old);
struct neighbour *dst_blackhole_neigh_lookup(const struct dst_entry *dst,
struct sk_buff *skb,
const void *daddr);
unsigned int dst_blackhole_mtu(const struct dst_entry *dst);
#endif /* _NET_DST_H */ #endif /* _NET_DST_H */
...@@ -237,6 +237,44 @@ void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old) ...@@ -237,6 +237,44 @@ void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old)
} }
EXPORT_SYMBOL(__dst_destroy_metrics_generic); EXPORT_SYMBOL(__dst_destroy_metrics_generic);
struct dst_entry *dst_blackhole_check(struct dst_entry *dst, u32 cookie)
{
return NULL;
}
u32 *dst_blackhole_cow_metrics(struct dst_entry *dst, unsigned long old)
{
return NULL;
}
struct neighbour *dst_blackhole_neigh_lookup(const struct dst_entry *dst,
struct sk_buff *skb,
const void *daddr)
{
return NULL;
}
void dst_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu,
bool confirm_neigh)
{
}
EXPORT_SYMBOL_GPL(dst_blackhole_update_pmtu);
void dst_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb)
{
}
EXPORT_SYMBOL_GPL(dst_blackhole_redirect);
unsigned int dst_blackhole_mtu(const struct dst_entry *dst)
{
unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
return mtu ? : dst->dev->mtu;
}
EXPORT_SYMBOL_GPL(dst_blackhole_mtu);
static struct dst_ops md_dst_ops = { static struct dst_ops md_dst_ops = {
.family = AF_UNSPEC, .family = AF_UNSPEC,
}; };
......
...@@ -2687,44 +2687,15 @@ struct rtable *ip_route_output_key_hash_rcu(struct net *net, struct flowi4 *fl4, ...@@ -2687,44 +2687,15 @@ struct rtable *ip_route_output_key_hash_rcu(struct net *net, struct flowi4 *fl4,
return rth; return rth;
} }
static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 cookie)
{
return NULL;
}
static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst)
{
unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
return mtu ? : dst->dev->mtu;
}
static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu,
bool confirm_neigh)
{
}
static void ipv4_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb)
{
}
static u32 *ipv4_rt_blackhole_cow_metrics(struct dst_entry *dst,
unsigned long old)
{
return NULL;
}
static struct dst_ops ipv4_dst_blackhole_ops = { static struct dst_ops ipv4_dst_blackhole_ops = {
.family = AF_INET, .family = AF_INET,
.check = ipv4_blackhole_dst_check, .default_advmss = ipv4_default_advmss,
.mtu = ipv4_blackhole_mtu, .neigh_lookup = ipv4_neigh_lookup,
.default_advmss = ipv4_default_advmss, .check = dst_blackhole_check,
.update_pmtu = ipv4_rt_blackhole_update_pmtu, .cow_metrics = dst_blackhole_cow_metrics,
.redirect = ipv4_rt_blackhole_redirect, .update_pmtu = dst_blackhole_update_pmtu,
.cow_metrics = ipv4_rt_blackhole_cow_metrics, .redirect = dst_blackhole_redirect,
.neigh_lookup = ipv4_neigh_lookup, .mtu = dst_blackhole_mtu,
}; };
struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_orig) struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_orig)
......
...@@ -260,34 +260,16 @@ static struct dst_ops ip6_dst_ops_template = { ...@@ -260,34 +260,16 @@ static struct dst_ops ip6_dst_ops_template = {
.confirm_neigh = ip6_confirm_neigh, .confirm_neigh = ip6_confirm_neigh,
}; };
static unsigned int ip6_blackhole_mtu(const struct dst_entry *dst)
{
unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
return mtu ? : dst->dev->mtu;
}
static void ip6_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu,
bool confirm_neigh)
{
}
static void ip6_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb)
{
}
static struct dst_ops ip6_dst_blackhole_ops = { static struct dst_ops ip6_dst_blackhole_ops = {
.family = AF_INET6, .family = AF_INET6,
.destroy = ip6_dst_destroy, .default_advmss = ip6_default_advmss,
.check = ip6_dst_check, .neigh_lookup = ip6_dst_neigh_lookup,
.mtu = ip6_blackhole_mtu, .check = ip6_dst_check,
.default_advmss = ip6_default_advmss, .destroy = ip6_dst_destroy,
.update_pmtu = ip6_rt_blackhole_update_pmtu, .cow_metrics = dst_cow_metrics_generic,
.redirect = ip6_rt_blackhole_redirect, .update_pmtu = dst_blackhole_update_pmtu,
.cow_metrics = dst_cow_metrics_generic, .redirect = dst_blackhole_redirect,
.neigh_lookup = ip6_dst_neigh_lookup, .mtu = dst_blackhole_mtu,
}; };
static const u32 ip6_template_metrics[RTAX_MAX] = { static const u32 ip6_template_metrics[RTAX_MAX] = {
......
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