Re: [RFC V2 PATCH 01/25] net: introduce NET policy
On 08/04/16 12:36, kan.li...@intel.com wrote: > From: Kan Liang > > This patch introduce NET policy subsystem. If proc is supported in the > system, it creates netpolicy node in proc system. > > Signed-off-by: Kan Liang > --- > include/linux/netdevice.h | 7 +++ > include/net/net_namespace.h | 3 ++ > net/Kconfig | 7 +++ > net/core/Makefile | 1 + > net/core/netpolicy.c| 128 > > 5 files changed, 146 insertions(+) > create mode 100644 net/core/netpolicy.c > diff --git a/net/Kconfig b/net/Kconfig > index c2cdbce..00552ba 100644 > --- a/net/Kconfig > +++ b/net/Kconfig > @@ -205,6 +205,13 @@ source "net/bridge/netfilter/Kconfig" > > endif > > +config NETPOLICY > + depends on NET > + bool "Net policy support" > + default y > + ---help--- > + Net policy support > + New kconfig options shouldn't default to y. -- ~Randy
[RFC V2 PATCH 01/25] net: introduce NET policy
From: Kan Liang This patch introduce NET policy subsystem. If proc is supported in the system, it creates netpolicy node in proc system. Signed-off-by: Kan Liang --- include/linux/netdevice.h | 7 +++ include/net/net_namespace.h | 3 ++ net/Kconfig | 7 +++ net/core/Makefile | 1 + net/core/netpolicy.c| 128 5 files changed, 146 insertions(+) create mode 100644 net/core/netpolicy.c diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 076df53..19638d6 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1619,6 +1619,8 @@ enum netdev_priv_flags { * switch driver and used to set the phys state of the * switch port. * + * @proc_dev: device node in proc to configure device net policy + * * FIXME: cleanup struct net_device such that network protocol info * moves out. */ @@ -1886,6 +1888,11 @@ struct net_device { struct lock_class_key *qdisc_tx_busylock; struct lock_class_key *qdisc_running_key; boolproto_down; +#ifdef CONFIG_NETPOLICY +#ifdef CONFIG_PROC_FS + struct proc_dir_entry *proc_dev; +#endif /* CONFIG_PROC_FS */ +#endif /* CONFIG_NETPOLICY */ }; #define to_net_dev(d) container_of(d, struct net_device, dev) diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 4089abc..d2ff6c4 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -142,6 +142,9 @@ struct net { #endif struct sock *diag_nlsk; atomic_tfnhe_genid; +#ifdef CONFIG_NETPOLICY + struct proc_dir_entry *proc_netpolicy; +#endif /* CONFIG_NETPOLICY */ }; #include diff --git a/net/Kconfig b/net/Kconfig index c2cdbce..00552ba 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -205,6 +205,13 @@ source "net/bridge/netfilter/Kconfig" endif +config NETPOLICY + depends on NET + bool "Net policy support" + default y + ---help--- + Net policy support + source "net/dccp/Kconfig" source "net/sctp/Kconfig" source "net/rds/Kconfig" diff --git a/net/core/Makefile b/net/core/Makefile index d6508c2..0be7092 100644 --- a/net/core/Makefile +++ b/net/core/Makefile @@ -27,3 +27,4 @@ obj-$(CONFIG_LWTUNNEL) += lwtunnel.o obj-$(CONFIG_DST_CACHE) += dst_cache.o obj-$(CONFIG_HWBM) += hwbm.o obj-$(CONFIG_NET_DEVLINK) += devlink.o +obj-$(CONFIG_NETPOLICY) += netpolicy.o diff --git a/net/core/netpolicy.c b/net/core/netpolicy.c new file mode 100644 index 000..faabfe7 --- /dev/null +++ b/net/core/netpolicy.c @@ -0,0 +1,128 @@ +/* + * netpolicy.c: Net policy support + * Copyright (c) 2016, Intel Corporation. + * Author: Kan Liang (kan.li...@intel.com) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope 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. + * + * NET policy intends to simplify the network configuration and get a good + * network performance according to the hints(policy) which is applied by user. + * + * Motivation + * - The network performance is not good with default system settings. + * - It is too difficult to do automatic tuning for all possible + * workloads, since workloads have different requirements. Some + * workloads may want high throughput. Some may need low latency. + * - There are lots of manual configurations. Fine grained configuration + * is too difficult for users. + * So, it is a big challenge to get good network performance. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_PROC_FS + +static int net_policy_proc_show(struct seq_file *m, void *v) +{ + struct net_device *dev = (struct net_device *)m->private; + + seq_printf(m, "%s doesn't support net policy manager\n", dev->name); + + return 0; +} + +static int net_policy_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, net_policy_proc_show, PDE_DATA(inode)); +} + +static const struct file_operations proc_net_policy_operations = { + .open = net_policy_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release= seq_release, + .owner = THIS_MODULE, +}; + +static int netpolicy_proc_dev_init(struct net *net, struct net_device *dev) +{ + dev->proc_dev = proc_net_mkdir(net, dev->name, net->proc_netpolicy); + if (!dev->proc_dev) + return -ENOMEM; + + if (!proc_create_data("policy",
[RFC V2 PATCH 01/25] net: introduce NET policy
From: Kan Liang This patch introduce NET policy subsystem. If proc is supported in the system, it creates netpolicy node in proc system. Signed-off-by: Kan Liang --- include/linux/netdevice.h | 7 +++ include/net/net_namespace.h | 3 ++ net/Kconfig | 7 +++ net/core/Makefile | 1 + net/core/netpolicy.c| 128 5 files changed, 146 insertions(+) create mode 100644 net/core/netpolicy.c diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 076df53..19638d6 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1619,6 +1619,8 @@ enum netdev_priv_flags { * switch driver and used to set the phys state of the * switch port. * + * @proc_dev: device node in proc to configure device net policy + * * FIXME: cleanup struct net_device such that network protocol info * moves out. */ @@ -1886,6 +1888,11 @@ struct net_device { struct lock_class_key *qdisc_tx_busylock; struct lock_class_key *qdisc_running_key; boolproto_down; +#ifdef CONFIG_NETPOLICY +#ifdef CONFIG_PROC_FS + struct proc_dir_entry *proc_dev; +#endif /* CONFIG_PROC_FS */ +#endif /* CONFIG_NETPOLICY */ }; #define to_net_dev(d) container_of(d, struct net_device, dev) diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 4089abc..d2ff6c4 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -142,6 +142,9 @@ struct net { #endif struct sock *diag_nlsk; atomic_tfnhe_genid; +#ifdef CONFIG_NETPOLICY + struct proc_dir_entry *proc_netpolicy; +#endif /* CONFIG_NETPOLICY */ }; #include diff --git a/net/Kconfig b/net/Kconfig index c2cdbce..00552ba 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -205,6 +205,13 @@ source "net/bridge/netfilter/Kconfig" endif +config NETPOLICY + depends on NET + bool "Net policy support" + default y + ---help--- + Net policy support + source "net/dccp/Kconfig" source "net/sctp/Kconfig" source "net/rds/Kconfig" diff --git a/net/core/Makefile b/net/core/Makefile index d6508c2..0be7092 100644 --- a/net/core/Makefile +++ b/net/core/Makefile @@ -27,3 +27,4 @@ obj-$(CONFIG_LWTUNNEL) += lwtunnel.o obj-$(CONFIG_DST_CACHE) += dst_cache.o obj-$(CONFIG_HWBM) += hwbm.o obj-$(CONFIG_NET_DEVLINK) += devlink.o +obj-$(CONFIG_NETPOLICY) += netpolicy.o diff --git a/net/core/netpolicy.c b/net/core/netpolicy.c new file mode 100644 index 000..faabfe7 --- /dev/null +++ b/net/core/netpolicy.c @@ -0,0 +1,128 @@ +/* + * netpolicy.c: Net policy support + * Copyright (c) 2016, Intel Corporation. + * Author: Kan Liang (kan.li...@intel.com) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope 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. + * + * NET policy intends to simplify the network configuration and get a good + * network performance according to the hints(policy) which is applied by user. + * + * Motivation + * - The network performance is not good with default system settings. + * - It is too difficult to do automatic tuning for all possible + * workloads, since workloads have different requirements. Some + * workloads may want high throughput. Some may need low latency. + * - There are lots of manual configurations. Fine grained configuration + * is too difficult for users. + * So, it is a big challenge to get good network performance. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_PROC_FS + +static int net_policy_proc_show(struct seq_file *m, void *v) +{ + struct net_device *dev = (struct net_device *)m->private; + + seq_printf(m, "%s doesn't support net policy manager\n", dev->name); + + return 0; +} + +static int net_policy_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, net_policy_proc_show, PDE_DATA(inode)); +} + +static const struct file_operations proc_net_policy_operations = { + .open = net_policy_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release= seq_release, + .owner = THIS_MODULE, +}; + +static int netpolicy_proc_dev_init(struct net *net, struct net_device *dev) +{ + dev->proc_dev = proc_net_mkdir(net, dev->name, net->proc_netpolicy); + if (!dev->proc_dev) + return -ENOMEM; + + if (!proc_create_data("policy",