Skip to content

Commit

Permalink
ipv4,ipv6 mroute: Add some helper inline functions to remove ugly ifd…
Browse files Browse the repository at this point in the history
…efs.

ip{,v6}_mroute_{set,get}sockopt() should not matter by optimization but
it would be better not to depend on optimization semantically.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
  • Loading branch information
YOSHIFUJI Hideaki committed Jul 3, 2008
1 parent 03d2f89 commit e0835f8
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 8 deletions.
27 changes: 27 additions & 0 deletions include/linux/mroute.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,37 @@ static inline int ip_mroute_opt(int opt)
}
#endif

#ifdef CONFIG_IP_MROUTE
extern int ip_mroute_setsockopt(struct sock *, int, char __user *, int);
extern int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
extern int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg);
extern int ip_mr_init(void);
#else
static inline
int ip_mroute_setsockopt(struct sock *sock,
int optname, char __user *optval, int optlen)
{
return -ENOPROTOOPT;
}

static inline
int ip_mroute_getsockopt(struct sock *sock,
int optname, char __user *optval, int __user *optlen)
{
return -ENOPROTOOPT;
}

static inline
int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
{
return -ENOIOCTLCMD;
}

static inline int ip_mr_init(void)
{
return 0;
}
#endif

struct vif_device
{
Expand Down
32 changes: 32 additions & 0 deletions include/linux/mroute6.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,44 @@ static inline int ip6_mroute_opt(int opt)

struct sock;

#ifdef CONFIG_IPV6_MROUTE
extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int);
extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
extern int ip6_mr_input(struct sk_buff *skb);
extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg);
extern int ip6_mr_init(void);
extern void ip6_mr_cleanup(void);
#else
static inline
int ip6_mroute_setsockopt(struct sock *sock,
int optname, char __user *optval, int optlen)
{
return -ENOPROTOOPT;
}

static inline
int ip6_mroute_getsockopt(struct sock *sock,
int optname, char __user *optval, int __user *optlen)
{
return -ENOPROTOOPT;
}

static inline
int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg)
{
return -ENOIOCTLCMD;
}

static inline int ip6_mr_init(void)
{
return 0;
}

static inline void ip6_mr_cleanup(void)
{
return;
}
#endif

struct mif_device
{
Expand Down
8 changes: 0 additions & 8 deletions net/ipv6/af_inet6.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,7 @@

#include <asm/uaccess.h>
#include <asm/system.h>
#ifdef CONFIG_IPV6_MROUTE
#include <linux/mroute6.h>
#endif

MODULE_AUTHOR("Cast of dozens");
MODULE_DESCRIPTION("IPv6 protocol stack for Linux");
Expand Down Expand Up @@ -952,11 +950,9 @@ static int __init inet6_init(void)
err = icmpv6_init();
if (err)
goto icmp_fail;
#ifdef CONFIG_IPV6_MROUTE
err = ip6_mr_init();
if (err)
goto ipmr_fail;
#endif
err = ndisc_init();
if (err)
goto ndisc_fail;
Expand Down Expand Up @@ -1059,10 +1055,8 @@ static int __init inet6_init(void)
igmp_fail:
ndisc_cleanup();
ndisc_fail:
#ifdef CONFIG_IPV6_MROUTE
ip6_mr_cleanup();
ipmr_fail:
#endif
icmpv6_cleanup();
icmp_fail:
unregister_pernet_subsys(&inet6_net_ops);
Expand Down Expand Up @@ -1117,9 +1111,7 @@ static void __exit inet6_exit(void)
ipv6_netfilter_fini();
igmp6_cleanup();
ndisc_cleanup();
#ifdef CONFIG_IPV6_MROUTE
ip6_mr_cleanup();
#endif
icmpv6_cleanup();
rawv6_exit();

Expand Down

0 comments on commit e0835f8

Please sign in to comment.