cregit-Linux how code gets into the kernel

Release 4.14 net/phonet/sysctl.c

Directory: net/phonet
/*
 * File: sysctl.c
 *
 * Phonet /proc/sys/net/phonet interface implementation
 *
 * Copyright (C) 2008 Nokia Corporation.
 *
 * Author: Rémi Denis-Courmont
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 */

#include <linux/seqlock.h>
#include <linux/sysctl.h>
#include <linux/errno.h>
#include <linux/init.h>

#include <net/sock.h>
#include <linux/phonet.h>
#include <net/phonet/phonet.h>


#define DYNAMIC_PORT_MIN	0x40

#define DYNAMIC_PORT_MAX	0x7f

static DEFINE_SEQLOCK(local_port_range_lock);

static int local_port_range_min[2] = {0, 0};

static int local_port_range_max[2] = {1023, 1023};

static int local_port_range[2] = {DYNAMIC_PORT_MIN, DYNAMIC_PORT_MAX};

static struct ctl_table_header *phonet_table_hrd;


static void set_local_port_range(int range[2]) { write_seqlock(&local_port_range_lock); local_port_range[0] = range[0]; local_port_range[1] = range[1]; write_sequnlock(&local_port_range_lock); }

Contributors

PersonTokensPropCommitsCommitProp
Rémi Denis-Courmont44100.00%1100.00%
Total44100.00%1100.00%


void phonet_get_local_port_range(int *min, int *max) { unsigned int seq; do { seq = read_seqbegin(&local_port_range_lock); if (min) *min = local_port_range[0]; if (max) *max = local_port_range[1]; } while (read_seqretry(&local_port_range_lock, seq)); }

Contributors

PersonTokensPropCommitsCommitProp
Rémi Denis-Courmont6298.41%150.00%
Eric Dumazet11.59%150.00%
Total63100.00%2100.00%


static int proc_local_port_range(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int ret; int range[2] = {local_port_range[0], local_port_range[1]}; struct ctl_table tmp = { .data = &range, .maxlen = sizeof(range), .mode = table->mode, .extra1 = &local_port_range_min, .extra2 = &local_port_range_max, }; 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; }

Contributors

PersonTokensPropCommitsCommitProp
Rémi Denis-Courmont13798.56%150.00%
Joe Perches21.44%150.00%
Total139100.00%2100.00%

static struct ctl_table phonet_table[] = { { .procname = "local_port_range", .data = &local_port_range, .maxlen = sizeof(local_port_range), .mode = 0644, .proc_handler = proc_local_port_range, }, { } };
int __init phonet_sysctl_init(void) { phonet_table_hrd = register_net_sysctl(&init_net, "net/phonet", phonet_table); return phonet_table_hrd == NULL ? -ENOMEM : 0; }

Contributors

PersonTokensPropCommitsCommitProp
Rémi Denis-Courmont2583.33%133.33%
Eric W. Biedermann516.67%266.67%
Total30100.00%3100.00%


void phonet_sysctl_exit(void) { unregister_net_sysctl_table(phonet_table_hrd); }

Contributors

PersonTokensPropCommitsCommitProp
Rémi Denis-Courmont1191.67%150.00%
Eric W. Biedermann18.33%150.00%
Total12100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Rémi Denis-Courmont40097.56%337.50%
Eric W. Biedermann71.71%337.50%
Joe Perches20.49%112.50%
Eric Dumazet10.24%112.50%
Total410100.00%8100.00%
Directory: net/phonet
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.