Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 79477
b: refs/heads/master
c: e4a2d5c
h: refs/heads/master
i:
  79475: 64b1232
v: v3
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed Jan 28, 2008
1 parent 99eeca1 commit 33dc311
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6ddc082223ef0f73717b4133fa7e648842bbfd02
refs/heads/master: e4a2d5c2bccd5bd29de5ae4f14ff4448fac9cfc8
1 change: 1 addition & 0 deletions trunk/include/net/netns/ipv4.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ struct sock;
struct netns_ipv4 {
#ifdef CONFIG_SYSCTL
struct ctl_table_header *forw_hdr;
struct ctl_table_header *frags_hdr;
#endif
struct ipv4_devconf *devconf_all;
struct ipv4_devconf *devconf_dflt;
Expand Down
1 change: 1 addition & 0 deletions trunk/include/net/netns/ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ struct ctl_table_header;
struct netns_sysctl_ipv6 {
#ifdef CONFIG_SYSCTL
struct ctl_table_header *table;
struct ctl_table_header *frags_hdr;
#endif
struct inet_frags_ctl frags;
int bindv6only;
Expand Down
42 changes: 39 additions & 3 deletions trunk/net/ipv4/ip_fragment.c
Original file line number Diff line number Diff line change
Expand Up @@ -661,17 +661,53 @@ static struct ctl_table ip4_frags_ctl_table[] = {

static int ip4_frags_ctl_register(struct net *net)
{
struct ctl_table *table;
struct ctl_table_header *hdr;

hdr = register_net_sysctl_table(net, net_ipv4_ctl_path,
ip4_frags_ctl_table);
return hdr == NULL ? -ENOMEM : 0;
table = ip4_frags_ctl_table;
if (net != &init_net) {
table = kmemdup(table, sizeof(ip4_frags_ctl_table), GFP_KERNEL);
if (table == NULL)
goto err_alloc;

table[0].mode &= ~0222;
table[1].mode &= ~0222;
table[2].mode &= ~0222;
table[3].mode &= ~0222;
table[4].mode &= ~0222;
}

hdr = register_net_sysctl_table(net, net_ipv4_ctl_path, table);
if (hdr == NULL)
goto err_reg;

net->ipv4.frags_hdr = hdr;
return 0;

err_reg:
if (net != &init_net)
kfree(table);
err_alloc:
return -ENOMEM;
}

static void ip4_frags_ctl_unregister(struct net *net)
{
struct ctl_table *table;

table = net->ipv4.frags_hdr->ctl_table_arg;
unregister_net_sysctl_table(net->ipv4.frags_hdr);
kfree(table);
}
#else
static inline int ip4_frags_ctl_register(struct net *net)
{
return 0;
}

static inline void ip4_frags_ctl_unregister(struct net *net)
{
}
#endif

static int ipv4_frags_init_net(struct net *net)
Expand Down
41 changes: 38 additions & 3 deletions trunk/net/ipv6/reassembly.c
Original file line number Diff line number Diff line change
Expand Up @@ -670,17 +670,52 @@ static struct ctl_table ip6_frags_ctl_table[] = {

static int ip6_frags_sysctl_register(struct net *net)
{
struct ctl_table *table;
struct ctl_table_header *hdr;

hdr = register_net_sysctl_table(net, net_ipv6_ctl_path,
ip6_frags_ctl_table);
return hdr == NULL ? -ENOMEM : 0;
table = ip6_frags_ctl_table;
if (net != &init_net) {
table = kmemdup(table, sizeof(ip6_frags_ctl_table), GFP_KERNEL);
if (table == NULL)
goto err_alloc;

table[0].mode &= ~0222;
table[1].mode &= ~0222;
table[2].mode &= ~0222;
table[3].mode &= ~0222;
}

hdr = register_net_sysctl_table(net, net_ipv6_ctl_path, table);
if (hdr == NULL)
goto err_reg;

net->ipv6.sysctl.frags_hdr = hdr;
return 0;

err_reg:
if (net != &init_net)
kfree(table);
err_alloc:
return -ENOMEM;
}

static void ip6_frags_sysctl_unregister(struct net *net)
{
struct ctl_table *table;

table = net->ipv6.sysctl.frags_hdr->ctl_table_arg;
unregister_net_sysctl_table(net->ipv6.sysctl.frags_hdr);
kfree(table);
}
#else
static inline int ip6_frags_sysctl_register(struct net *net)
{
return 0;
}

static inline void ip6_frags_sysctl_unregister(struct net *net)
{
}
#endif

static int ipv6_frags_init_net(struct net *net)
Expand Down

0 comments on commit 33dc311

Please sign in to comment.