/* -*- linux-c -*-
 * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
 *
 * Begun April 1, 1996, Mike Shaver.
 * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS]
 */

#include <linux/mm.h>
#include <linux/sysctl.h>
#include <net/ip.h>

/* From arp.c */
extern int sysctl_arp_res_time;
extern int sysctl_arp_dead_res_time;
extern int sysctl_arp_max_tries;
extern int sysctl_arp_timeout;
extern int sysctl_arp_check_interval;
extern int sysctl_arp_confirm_interval;
extern int sysctl_arp_confirm_timeout;

extern int sysctl_ip_forward;
extern int sysctl_ip_dynaddr;
static int proc_doipforward(ctl_table *ctl, int write, struct file *filp,
			    void *buffer, size_t *lenp) 
{
    int val = sysctl_ip_forward;    
    int retv;

    retv = proc_dointvec(ctl, write, filp, buffer, lenp);
    if (write) {
	if (sysctl_ip_forward && !val) {
	    printk(KERN_INFO "sysctl: ip forwarding enabled\n");
	    ip_statistics.IpForwarding = 1; 
	}
	if (!sysctl_ip_forward && val) {
	    printk(KERN_INFO "sysctl: ip forwarding off\n");
	    ip_statistics.IpForwarding = 2;
	}
    }
    return retv; 
}

ctl_table ipv4_table[] = {
        {NET_IPV4_ARP_RES_TIME, "arp_res_time",
         &sysctl_arp_res_time, sizeof(int), 0644, NULL, &proc_dointvec},
        {NET_IPV4_ARP_DEAD_RES_TIME, "arp_dead_res_time",
         &sysctl_arp_dead_res_time, sizeof(int), 0644, NULL, &proc_dointvec},
        {NET_IPV4_ARP_MAX_TRIES, "arp_max_tries",
         &sysctl_arp_max_tries, sizeof(int), 0644, NULL, &proc_dointvec},
        {NET_IPV4_ARP_TIMEOUT, "arp_timeout",
         &sysctl_arp_timeout, sizeof(int), 0644, NULL, &proc_dointvec},
        {NET_IPV4_ARP_CHECK_INTERVAL, "arp_check_interval",
         &sysctl_arp_check_interval, sizeof(int), 0644, NULL, &proc_dointvec},
        {NET_IPV4_ARP_CONFIRM_INTERVAL, "arp_confirm_interval",
         &sysctl_arp_confirm_interval, sizeof(int), 0644, NULL,
         &proc_dointvec},
        {NET_IPV4_ARP_CONFIRM_TIMEOUT, "arp_confirm_timeout",
         &sysctl_arp_confirm_timeout, sizeof(int), 0644, NULL,
         &proc_dointvec},
	{NET_IPV4_FORWARD, "ip_forward", &sysctl_ip_forward, sizeof(int),
	 0644, NULL, &proc_doipforward },
        {NET_IPV4_DYNADDR, "ip_dynaddr",
         &sysctl_ip_dynaddr, sizeof(int), 0644, NULL, &proc_dointvec},
	{0}
};
