ipvlan: decouple l3s mode dependencies from other modes
Right now ipvlan has a hard dependency on CONFIG_NETFILTER and otherwise it cannot be built. However, the only ipvlan operation mode that actually depends on netfilter is l3s, everything else is independent of it. Break this hard dependency such that users are able to use ipvlan l3 mode on systems where netfilter is not compiled in. Therefore, this adds a hidden CONFIG_IPVLAN_L3S bool which is defaulting to y when CONFIG_NETFILTER is set in order to retain existing behavior for l3s. All l3s related code is refactored into ipvlan_l3s.c that is compiled in when enabled. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Cc: Mahesh Bandewar <maheshb@google.com> Cc: Florian Westphal <fw@strlen.de> Cc: Martynas Pumputis <m@lambda.lt> Acked-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
998a8a8387
commit
c675e06a98
@@ -165,10 +165,9 @@ struct ipvl_addr *ipvlan_find_addr(const struct ipvl_dev *ipvlan,
|
||||
const void *iaddr, bool is_v6);
|
||||
bool ipvlan_addr_busy(struct ipvl_port *port, void *iaddr, bool is_v6);
|
||||
void ipvlan_ht_addr_del(struct ipvl_addr *addr);
|
||||
struct sk_buff *ipvlan_l3_rcv(struct net_device *dev, struct sk_buff *skb,
|
||||
u16 proto);
|
||||
unsigned int ipvlan_nf_input(void *priv, struct sk_buff *skb,
|
||||
const struct nf_hook_state *state);
|
||||
struct ipvl_addr *ipvlan_addr_lookup(struct ipvl_port *port, void *lyr3h,
|
||||
int addr_type, bool use_dest);
|
||||
void *ipvlan_get_L3_hdr(struct ipvl_port *port, struct sk_buff *skb, int *type);
|
||||
void ipvlan_count_rx(const struct ipvl_dev *ipvlan,
|
||||
unsigned int len, bool success, bool mcast);
|
||||
int ipvlan_link_new(struct net *src_net, struct net_device *dev,
|
||||
@@ -177,6 +176,36 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev,
|
||||
void ipvlan_link_delete(struct net_device *dev, struct list_head *head);
|
||||
void ipvlan_link_setup(struct net_device *dev);
|
||||
int ipvlan_link_register(struct rtnl_link_ops *ops);
|
||||
#ifdef CONFIG_IPVLAN_L3S
|
||||
int ipvlan_l3s_register(struct ipvl_port *port);
|
||||
void ipvlan_l3s_unregister(struct ipvl_port *port);
|
||||
void ipvlan_migrate_l3s_hook(struct net *oldnet, struct net *newnet);
|
||||
int ipvlan_l3s_init(void);
|
||||
void ipvlan_l3s_cleanup(void);
|
||||
#else
|
||||
static inline int ipvlan_l3s_register(struct ipvl_port *port)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
static inline void ipvlan_l3s_unregister(struct ipvl_port *port)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void ipvlan_migrate_l3s_hook(struct net *oldnet,
|
||||
struct net *newnet)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int ipvlan_l3s_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void ipvlan_l3s_cleanup(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_IPVLAN_L3S */
|
||||
|
||||
static inline bool netif_is_ipvlan_port(const struct net_device *dev)
|
||||
{
|
||||
|
Reference in New Issue
Block a user