コード例 #1
0
ファイル: sysctl.c プロジェクト: b3rnik/dsl-n55u-bender
static int sysctl_lasat_eeprom_value(ctl_table *table, int *name, int nlen,
                                     void *oldval, size_t *oldlenp,
                                     void *newval, size_t newlen)
{
    int r;

    mutex_lock(&lasat_info_mutex);
    r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
    if (r < 0) {
        mutex_unlock(&lasat_info_mutex);
        return r;
    }

    if (newval && newlen)
    {
        if (name && *name == LASAT_PRID)
            lasat_board_info.li_eeprom_info.prid = *(int*)newval;

        lasat_write_eeprom_info();
        lasat_init_board_info();
    }
    mutex_unlock(&lasat_info_mutex);

    return 0;
}
コード例 #2
0
ファイル: sysctl.c プロジェクト: 274914765/C
/* Sysctl for setting the IP addresses */
int sysctl_lasat_intvec(ctl_table *table, int *name, int nlen,
            void *oldval, size_t *oldlenp,
            void *newval, size_t newlen)
{
    int r;

    r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
    if (r < 0)
        return r;

    if (newval && newlen)
        lasat_write_eeprom_info();

    return 0;
}
コード例 #3
0
ファイル: sysctl.c プロジェクト: 274914765/C
static int sysctl_lasat_prid(ctl_table *table, int *name, int nlen,
                     void *oldval, size_t *oldlenp,
                     void *newval, size_t newlen)
{
    int r;

    r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
    if (r < 0)
        return r;
    if (newval && newlen) {
        lasat_board_info.li_eeprom_info.prid = *(int *)newval;
        lasat_write_eeprom_info();
        lasat_init_board_info();
    }
    return 0;
}
コード例 #4
0
ファイル: sysctl.c プロジェクト: 274914765/C
/* Same for RTC */
int sysctl_lasat_rtc(ctl_table *table, int *name, int nlen,
            void *oldval, size_t *oldlenp,
            void *newval, size_t newlen)
{
    int r;

    rtctmp = read_persistent_clock();
    if (rtctmp < 0)
        rtctmp = 0;
    r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
    if (r < 0)
        return r;
    if (newval && newlen)
        rtc_mips_set_mmss(rtctmp);

    return r;
}
コード例 #5
0
ファイル: sysctl.c プロジェクト: b3rnik/dsl-n55u-bender
/* Sysctl for setting the IP addresses */
int sysctl_lasat_intvec(ctl_table *table, int *name, int nlen,
                        void *oldval, size_t *oldlenp,
                        void *newval, size_t newlen)
{
    int r;
    mutex_lock(&lasat_info_mutex);
    r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
    if (r < 0) {
        mutex_unlock(&lasat_info_mutex);
        return r;
    }
    if (newval && newlen) {
        lasat_write_eeprom_info();
    }
    mutex_unlock(&lasat_info_mutex);
    return 1;
}
コード例 #6
0
ファイル: sysctl.c プロジェクト: b3rnik/dsl-n55u-bender
/* Same for RTC */
int sysctl_lasat_rtc(ctl_table *table, int *name, int nlen,
                     void *oldval, size_t *oldlenp,
                     void *newval, size_t newlen)
{
    int r;
    mutex_lock(&lasat_info_mutex);
    rtctmp = ds1603_read();
    if (rtctmp < 0)
        rtctmp = 0;
    r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
    if (r < 0) {
        mutex_unlock(&lasat_info_mutex);
        return r;
    }
    if (newval && newlen) {
        ds1603_set(rtctmp);
    }
    mutex_unlock(&lasat_info_mutex);
    return 1;
}
コード例 #7
0
/* Validate changes from /proc interface. */
static int ipv4_local_port_range(ctl_table *table, int write,
				 void __user *buffer,
				 size_t *lenp, loff_t *ppos)
{
	int ret;
	int range[2];
	ctl_table tmp = {
		.data = &range,
		.maxlen = sizeof(range),
		.mode = table->mode,
		.extra1 = &ip_local_port_range_min,
		.extra2 = &ip_local_port_range_max,
	};

	inet_get_local_port_range(range, range + 1);
	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);

	if (write && ret == 0) {
		if (range[1] < range[0])
			ret = -EINVAL;
		else
			set_local_port_range(range);
	}

	return ret;
}

/* Validate changes from sysctl interface. */
static int ipv4_sysctl_local_port_range(ctl_table *table,
					 void __user *oldval,
					 size_t __user *oldlenp,
					void __user *newval, size_t newlen)
{
	int ret;
	int range[2];
	ctl_table tmp = {
		.data = &range,
		.maxlen = sizeof(range),
		.mode = table->mode,
		.extra1 = &ip_local_port_range_min,
		.extra2 = &ip_local_port_range_max,
	};

	inet_get_local_port_range(range, range + 1);
	ret = sysctl_intvec(&tmp, oldval, oldlenp, newval, newlen);
	if (ret == 0 && newval && newlen) {
		if (range[1] < range[0])
			ret = -EINVAL;
		else
			set_local_port_range(range);
	}
	return ret;
}


static int proc_tcp_congestion_control(ctl_table *ctl, int write,
				       void __user *buffer, size_t *lenp, loff_t *ppos)
{
	char val[TCP_CA_NAME_MAX];
	ctl_table tbl = {
		.data = val,
		.maxlen = TCP_CA_NAME_MAX,
	};
	int ret;

	tcp_get_default_congestion_control(val);

	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
	if (write && ret == 0)
		ret = tcp_set_default_congestion_control(val);
	return ret;
}
コード例 #8
0
ファイル: sysctl_net_ipv4.c プロジェクト: 3null/fastsocket
/* Validate changes from /proc interface. */
static int ipv4_local_port_range(ctl_table *table, int write,
				 void __user *buffer,
				 size_t *lenp, loff_t *ppos)
{
	int ret;
	int range[2];
	ctl_table tmp = {
		.data = &range,
		.maxlen = sizeof(range),
		.mode = table->mode,
		.extra1 = &ip_local_port_range_min,
		.extra2 = &ip_local_port_range_max,
	};

	inet_get_local_port_range(range, range + 1);
	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);

	if (write && ret == 0) {
		if (range[1] < range[0])
			ret = -EINVAL;
		else
			set_local_port_range(range);
	}

	return ret;
}

/* Validate changes from sysctl interface. */
static int ipv4_sysctl_local_port_range(ctl_table *table,
					 void __user *oldval,
					 size_t __user *oldlenp,
					void __user *newval, size_t newlen)
{
	int ret;
	int range[2];
	ctl_table tmp = {
		.data = &range,
		.maxlen = sizeof(range),
		.mode = table->mode,
		.extra1 = &ip_local_port_range_min,
		.extra2 = &ip_local_port_range_max,
	};

	inet_get_local_port_range(range, range + 1);
	ret = sysctl_intvec(&tmp, oldval, oldlenp, newval, newlen);
	if (ret == 0 && newval && newlen) {
		if (range[1] < range[0])
			ret = -EINVAL;
		else
			set_local_port_range(range);
	}
	return ret;
}


static void inet_get_ping_group_range_table(struct ctl_table *table, gid_t *low, gid_t *high)
{
	gid_t *data = table->data;
	unsigned seq;
	do {
		seq = read_seqbegin(&sysctl_local_ports.lock);

		*low = data[0];
		*high = data[1];
	} while (read_seqretry(&sysctl_local_ports.lock, seq));
}