From f2982f46608462544d038d2aefe39742dabcf85a Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Tue, 24 May 2011 17:08:09 +0200 Subject: [PATCH] removed files --- src/Makefile | 11 +-- src/core.c | 20 +----- src/fb_eth.c | 4 -- src/sd_blackhole.c | 53 --------------- src/sd_curr.c | 51 -------------- src/sd_rand.c | 68 ------------------- src/sd_rr.c | 68 ------------------- src/sd_single.c | 118 -------------------------------- src/testskb.c | 81 ---------------------- src/testskb2.c | 53 --------------- src/xt_migrate.c | 59 ---------------- src/xt_migrate.h | 17 ----- src/xt_sched.c | 192 ----------------------------------------------------- src/xt_sched.h | 44 ------------ 14 files changed, 2 insertions(+), 837 deletions(-) delete mode 100644 src/sd_blackhole.c delete mode 100644 src/sd_curr.c delete mode 100644 src/sd_rand.c delete mode 100644 src/sd_rr.c delete mode 100644 src/sd_single.c delete mode 100644 src/testskb.c delete mode 100644 src/testskb2.c delete mode 100644 src/xt_migrate.c delete mode 100644 src/xt_migrate.h delete mode 100644 src/xt_sched.c delete mode 100644 src/xt_sched.h diff --git a/src/Makefile b/src/Makefile index d1a27e4..846ebf4 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,13 +7,11 @@ # lana-y := core.o \ - xt_sched.o \ xt_vlink.o \ xt_engine.o \ xt_fblock.o \ xt_builder.o \ xt_critbit.o \ - xt_migrate.o \ xt_user.o obj-m += lana.o @@ -22,17 +20,10 @@ obj-m += lana.o # module. # Test modules -obj-m += fb_eth.o obj-m += fb_dummy.o -obj-m += testskb.o -obj-m += testskb2.o # Real modules -obj-m += sd_blackhole.o -obj-m += sd_rr.o -obj-m += sd_single.o -obj-m += sd_curr.o -obj-m += sd_rand.o +obj-m += fb_eth.o obj-m += fb_ethvlink.o MDIR := /lib/modules/$(shell uname -r) diff --git a/src/core.c b/src/core.c index 7ec8258..73a6758 100644 --- a/src/core.c +++ b/src/core.c @@ -17,33 +17,24 @@ #include "xt_vlink.h" #include "xt_engine.h" #include "xt_builder.h" -#include "xt_sched.h" #include "xt_user.h" -#include "xt_migrate.h" struct proc_dir_entry *lana_proc_dir; EXPORT_SYMBOL(lana_proc_dir); struct proc_dir_entry *fblock_proc_dir; EXPORT_SYMBOL(fblock_proc_dir); -struct proc_dir_entry *sched_proc_dir; -EXPORT_SYMBOL(sched_proc_dir); static int __init init_lana_core_module(void) { int ret; printk(KERN_INFO "[lana] bootstrapping core ...\n"); - try_migrate_procs_to(USERSPACECPU); - lana_proc_dir = proc_mkdir("lana", init_net.proc_net); if (!lana_proc_dir) return -ENOMEM; fblock_proc_dir = proc_mkdir("fblock", lana_proc_dir); if (!fblock_proc_dir) goto err; - sched_proc_dir = proc_mkdir("sched", lana_proc_dir); - if (!sched_proc_dir) - goto err0; ret = init_vlink_system(); if (ret) goto err1; @@ -56,16 +47,11 @@ static int __init init_lana_core_module(void) ret = init_fblock_builder(); if (ret) goto err4; - ret = init_ppesched_system(); - if (ret) - goto err5; ret = init_userctl_system(); if (ret) - goto err6; + goto err5; printk(KERN_INFO "[lana] core up and running!\n"); return 0; -err6: - cleanup_ppesched_system(); err5: cleanup_fblock_builder(); err4: @@ -75,8 +61,6 @@ err3: err2: cleanup_vlink_system(); err1: - remove_proc_entry("sched", lana_proc_dir); -err0: remove_proc_entry("fblock", lana_proc_dir); err: remove_proc_entry("lana", init_net.proc_net); @@ -89,11 +73,9 @@ static void __exit cleanup_lana_core_module(void) cleanup_userctl_system(); cleanup_worker_engines(); cleanup_fblock_tables(); - cleanup_ppesched_system(); cleanup_fblock_builder(); cleanup_vlink_system(); remove_proc_entry("fblock", lana_proc_dir); - remove_proc_entry("sched", lana_proc_dir); remove_proc_entry("lana", init_net.proc_net); printk(KERN_INFO "[lana] core shut down!\n"); } diff --git a/src/fb_eth.c b/src/fb_eth.c index 31740a9..d4c5e8e 100644 --- a/src/fb_eth.c +++ b/src/fb_eth.c @@ -23,7 +23,6 @@ #include "xt_idp.h" #include "xt_skb.h" #include "xt_engine.h" -#include "xt_sched.h" #include "xt_fblock.h" #include "xt_builder.h" @@ -219,7 +218,6 @@ static struct fblock *fb_eth_ctor(char *name) ret = register_fblock_namespace(fb); if (ret) goto err3; - ppesched_init(); ret = init_fb_eth(); if (ret) goto err4; @@ -228,7 +226,6 @@ static struct fblock *fb_eth_ctor(char *name) smp_wmb(); return fb; err4: - ppesched_cleanup(); unregister_fblock_namespace(fb); return NULL; err3: @@ -247,7 +244,6 @@ static void fb_eth_dtor(struct fblock *fb) module_put(THIS_MODULE); instantiated = 0; cleanup_fb_eth(); - ppesched_cleanup(); } static struct fblock_factory fb_eth_factory = { diff --git a/src/sd_blackhole.c b/src/sd_blackhole.c deleted file mode 100644 index 89b9fed..0000000 --- a/src/sd_blackhole.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Blackhole scheduler. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - * - * Note: Quantum tunneling is not supported, too. - */ - -#include -#include -#include - -#include "xt_sched.h" -#include "xt_engine.h" - -static int ppe_blackhole_sched(struct sk_buff *skb, enum path_type dir) -{ - /* ... entering the event horizon! */ - kfree_skb(skb); - return PPE_SUCCESS; -} - -static struct ppesched_discipline_ops ppe_blackhole_ops __read_mostly = { - .discipline_sched = ppe_blackhole_sched, -}; - -static struct ppesched_discipline ppe_blackhole __read_mostly = { - .name = "blackhole", - .ops = &ppe_blackhole_ops, - .owner = THIS_MODULE, -}; - -static int __init init_ppe_blackhole_module(void) -{ - return ppesched_discipline_register(&ppe_blackhole); -} - -static void __exit cleanup_ppe_blackhole_module(void) -{ - return ppesched_discipline_unregister(&ppe_blackhole); -} - -module_init(init_ppe_blackhole_module); -module_exit(cleanup_ppe_blackhole_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA black hole scheduler"); - diff --git a/src/sd_curr.c b/src/sd_curr.c deleted file mode 100644 index afe64c6..0000000 --- a/src/sd_curr.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Current CPU scheduler. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include - -#include "xt_sched.h" -#include "xt_engine.h" - -static int ppe_curr_sched(struct sk_buff *skb, enum path_type dir) -{ - enqueue_on_engine(skb, smp_processor_id(), dir); - return PPE_SUCCESS; -} - -static struct ppesched_discipline_ops ppe_curr_ops __read_mostly = { - .discipline_sched = ppe_curr_sched, -}; - -static struct ppesched_discipline ppe_curr __read_mostly = { - .name = "currcpu", - .ops = &ppe_curr_ops, - .owner = THIS_MODULE, -}; - -static int __init init_ppe_curr_module(void) -{ - return ppesched_discipline_register(&ppe_curr); -} - -static void __exit cleanup_ppe_curr_module(void) -{ - return ppesched_discipline_unregister(&ppe_curr); -} - -module_init(init_ppe_curr_module); -module_exit(cleanup_ppe_curr_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA current CPU scheduler"); - diff --git a/src/sd_rand.c b/src/sd_rand.c deleted file mode 100644 index a080562..0000000 --- a/src/sd_rand.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Random CPU scheduler. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include -#include - -#include "xt_sched.h" -#include "xt_engine.h" - -static unsigned long cpu_max; - -static int ppe_rand_init(void) -{ - cpu_max = num_online_cpus(); - return 0; -} - -static int ppe_rand_sched(struct sk_buff *skb, enum path_type dir) -{ -#ifdef __MIGRATE - unsigned long ncpu = net_random() & (cpu_max - 1); - while (ncpu == USERSPACECPU) - ncpu = net_random() & (cpu_max - 1); - enqueue_on_engine(skb, ncpu, dir); -#else - enqueue_on_engine(skb, net_random() & (cpu_max - 1), dir); -#endif /* __MIGRATE */ - return PPE_SUCCESS; -} - -static struct ppesched_discipline_ops ppe_rand_ops __read_mostly = { - .discipline_init = ppe_rand_init, - .discipline_sched = ppe_rand_sched, -}; - -static struct ppesched_discipline ppe_rand __read_mostly = { - .name = "randcpu", - .ops = &ppe_rand_ops, - .owner = THIS_MODULE, -}; - -static int __init init_ppe_rand_module(void) -{ - return ppesched_discipline_register(&ppe_rand); -} - -static void __exit cleanup_ppe_rand_module(void) -{ - return ppesched_discipline_unregister(&ppe_rand); -} - -module_init(init_ppe_rand_module); -module_exit(cleanup_ppe_rand_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA random CPU scheduler"); - diff --git a/src/sd_rr.c b/src/sd_rr.c deleted file mode 100644 index a1252b3..0000000 --- a/src/sd_rr.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Round robin scheduler. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include - -#include "xt_sched.h" -#include "xt_engine.h" - -static volatile unsigned long cpu = 0; -static unsigned long __read_mostly cpu_max; - -static int ppe_rr_init(void) -{ - cpu_max = num_online_cpus(); - return 0; -} - -static int ppe_rr_sched(struct sk_buff *skb, enum path_type dir) -{ -#ifdef __MIGRATE - unsigned long ncpu = cpu++ & (cpu_max - 1); - while (ncpu == USERSPACECPU) - ncpu = cpu++ & (cpu_max - 1); - enqueue_on_engine(skb, ncpu, dir); -#else - enqueue_on_engine(skb, cpu++ & (cpu_max - 1), dir); -#endif /* __MIGRATE */ - return PPE_SUCCESS; -} - -static struct ppesched_discipline_ops ppe_rr_ops __read_mostly = { - .discipline_init = ppe_rr_init, - .discipline_sched = ppe_rr_sched, -}; - -static struct ppesched_discipline ppe_rr __read_mostly = { - .name = "roundrobin", - .ops = &ppe_rr_ops, - .owner = THIS_MODULE, -}; - -static int __init init_ppe_rr_module(void) -{ - return ppesched_discipline_register(&ppe_rr); -} - -static void __exit cleanup_ppe_rr_module(void) -{ - return ppesched_discipline_unregister(&ppe_rr); -} - -module_init(init_ppe_rr_module); -module_exit(cleanup_ppe_rr_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA round robin scheduler"); - diff --git a/src/sd_single.c b/src/sd_single.c deleted file mode 100644 index 6013a6b..0000000 --- a/src/sd_single.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Single CPU scheduler. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include -#include - -#include "xt_sched.h" -#include "xt_engine.h" - -extern struct proc_dir_entry *sched_proc_dir; -static struct proc_dir_entry *ppesched_cpu_proc; -static volatile unsigned long __read_mostly cpu = 0; - -static int ppe_single_sched(struct sk_buff *skb, enum path_type dir) -{ -#ifdef __MIGRATE - if (cpu != USERSPACECPU) - enqueue_on_engine(skb, cpu, dir); - else - kfree_skb(skb); -#else - enqueue_on_engine(skb, cpu, dir); -#endif /* __MIGRATE */ - return PPE_SUCCESS; -} - -static struct ppesched_discipline_ops ppe_single_ops __read_mostly = { - .discipline_sched = ppe_single_sched, -}; - -static struct ppesched_discipline ppe_single __read_mostly = { - .name = "singlecpu", - .ops = &ppe_single_ops, - .owner = THIS_MODULE, -}; - -static int ppe_single_procfs_read(char *page, char **start, off_t offset, - int count, int *eof, void *data) -{ - off_t len = 0; - len += sprintf(page + len, "%lu\n", cpu); - *eof = 1; - return len; -} - -static int ppe_single_procfs_write(struct file *file, const char __user *buffer, - unsigned long count, void *data) -{ - int ret = count, res; - size_t len; - char *dst_cpu; - - if (count > 64) - return -EINVAL; - len = count; - dst_cpu = kmalloc(len, GFP_KERNEL); - if (!dst_cpu) - return -ENOMEM; - memset(dst_cpu, 0, len); - if (copy_from_user(dst_cpu, buffer, len)) { - ret = -EFAULT; - goto out; - } - dst_cpu[len - 1] = 0; - res = simple_strtol(dst_cpu, NULL, 10); - if (res >= num_online_cpus() || res < 0) { - ret = -EINVAL; - goto out; - } - cpu = res; - barrier(); - ret = len; -out: - kfree(dst_cpu); - return ret; -} - -static int __init init_ppe_single_module(void) -{ - int ret; - ret = ppesched_discipline_register(&ppe_single); - if (ret != 0) - return ret; - ppesched_cpu_proc = create_proc_entry("sched_cpu", 0666, - sched_proc_dir); - if (!ppesched_cpu_proc) { - ppesched_discipline_unregister(&ppe_single); - return -ENOMEM; - } - ppesched_cpu_proc->read_proc = ppe_single_procfs_read; - ppesched_cpu_proc->write_proc = ppe_single_procfs_write; - ppesched_cpu_proc->data = NULL; - return 0; -} - -static void __exit cleanup_ppe_single_module(void) -{ - remove_proc_entry("sched_cpu", sched_proc_dir); - ppesched_discipline_unregister(&ppe_single); -} - -module_init(init_ppe_single_module); -module_exit(cleanup_ppe_single_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA single CPU scheduler"); - diff --git a/src/testskb.c b/src/testskb.c deleted file mode 100644 index 18564e9..0000000 --- a/src/testskb.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Dummy test module. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include - -#include "xt_skb.h" -#include "xt_idp.h" -#include "xt_sched.h" -#include "xt_engine.h" - -#define PKTS 140000UL -#define PKT_LEN 96 - -static int __init init_fbtestgen_module(void) -{ - unsigned long i; - struct sk_buff **skba; - - ppesched_init(); - - skba = kmalloc(sizeof(*skba) * PKTS, GFP_KERNEL); - if (!skba) - return -ENOMEM; - memset(skba, 0, sizeof(*skba) * PKTS); - for (i = 0; i < PKTS; ++i) { - skba[i] = alloc_skb(PKT_LEN, GFP_KERNEL); - if (unlikely(!skba[i])) - goto err; - skb_put(skba[i], 64); - write_next_idp_to_skb(skba[i], IDP_UNKNOWN, /*IDP_UNKNOWN*/ 1); - } - - time_mark_skb_first(skba[0]); - time_mark_skb_first(skba[1]); - time_mark_skb_first(skba[2]); - time_mark_skb_first(skba[3]); - - time_mark_skb_last(skba[PKTS-1-3]); - time_mark_skb_last(skba[PKTS-1-2]); - time_mark_skb_last(skba[PKTS-1-1]); - time_mark_skb_last(skba[PKTS-1-0]); - - for (i = 0; i < PKTS; ++i) - ppesched_sched(skba[i], TYPE_EGRESS); - -// wake_engine(0); -// wake_engine(1); -// wake_engine(2); -// wake_engine(3); - - kfree(skba); - printk(KERN_INFO "test done, %lu pkts!\n", PKTS); - return 0; -err: - for (i = 0; i < PKTS; ++i) { - if (skba[i]) - kfree_skb(skba[i]); - } - return -ENOMEM; -} - -static void __exit cleanup_fbtestgen_module(void) -{ -} - -module_init(init_fbtestgen_module); -module_exit(cleanup_fbtestgen_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA testgen module"); diff --git a/src/testskb2.c b/src/testskb2.c deleted file mode 100644 index 0b18c56..0000000 --- a/src/testskb2.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Dummy test module. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include - -#include "xt_skb.h" -#include "xt_idp.h" -#include "xt_sched.h" -#include "xt_engine.h" - -#define PKTS 6000000UL -#define PKT_LEN 96 - -static int __init init_fbtestgen2_module(void) -{ - unsigned long i; - ppesched_init(); - for (i = 0; i < PKTS; ++i) { - struct sk_buff *skb = alloc_skb(PKT_LEN, GFP_ATOMIC); - if (unlikely(!skb)) - break; - skb_put(skb, 64); - if (i < 4) - time_mark_skb_first(skb); - if (i >= PKTS-4) - time_mark_skb_last(skb); - write_next_idp_to_skb(skb, IDP_UNKNOWN, /*IDP_UNKNOWN*/ 1); - ppesched_sched(skb, TYPE_EGRESS); - } - printk(KERN_INFO "test done, %lu pkts!\n", PKTS); - return 0; -} - -static void __exit cleanup_fbtestgen2_module(void) -{ -} - -module_init(init_fbtestgen2_module); -module_exit(cleanup_fbtestgen2_module); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Daniel Borkmann "); -MODULE_DESCRIPTION("LANA testgen module"); diff --git a/src/xt_migrate.c b/src/xt_migrate.c deleted file mode 100644 index e2e195a..0000000 --- a/src/xt_migrate.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Migration function for tasks. Tasks will be rescheduled with another - * CPU affinity, so that PPEs are the only users on a CPU. Usefull for - * Appliances like Routers. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "xt_migrate.h" - -#ifdef __MIGRATE -void try_migrate_procs_to(unsigned long cpu) -{ - int retval; - unsigned int count = 0; - struct task_struct *p; - struct cpumask in_mask; - cpumask_var_t new_mask; - - if (num_online_cpus() == 1 || cpu >= num_online_cpus()) - return; - - cpumask_clear(&in_mask); - cpumask_set_cpu(cpu, &in_mask); - - for_each_process(p) { - get_online_cpus(); - get_task_struct(p); - if (!alloc_cpumask_var(&new_mask, GFP_KERNEL)) - goto try_next; - cpumask_copy(new_mask, &in_mask); - retval = set_cpus_allowed_ptr(p, new_mask); - if (!retval) - count++; - free_cpumask_var(new_mask); -try_next: - put_task_struct(p); - put_online_cpus(); - } - printk(KERN_INFO "[lana] %u processes migrated to CPU%lu!\n", - count, cpu); -} -#else -void try_migrate_procs_to(unsigned long cpu) { } -#endif /* __MIGRATE */ -EXPORT_SYMBOL(try_migrate_procs_to); - diff --git a/src/xt_migrate.h b/src/xt_migrate.h deleted file mode 100644 index 21b4869..0000000 --- a/src/xt_migrate.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#ifndef XT_MIGRATE_H -#define XT_MIGRATE_H - -#include "xt_conf.h" - -extern void try_migrate_procs_to(unsigned long cpu); - -#endif /* XT_MIGRATE_H */ - diff --git a/src/xt_sched.c b/src/xt_sched.c deleted file mode 100644 index 0904dfa..0000000 --- a/src/xt_sched.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Ingress and egress flow ppe-scheduler. Flows that traverse the network - * stack, e.g. ranging from PHY to the socket handler, are kept CPU-affine - * for the communication. This scheduler framework offers modules to register - * their disciplines. - * - * Change scheduling policies with, i.e. echo "1" > /proc/net/lana/ppesched - * where "n" is the id of the discipline. - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#include -#include -#include -#include -#include - -#include "xt_sched.h" - -#define MAX_SCHED 32 - -static volatile int pc = -1; -static struct ppesched_discipline *pdt[MAX_SCHED]; - -extern struct proc_dir_entry *lana_proc_dir; -static struct proc_dir_entry *ppesched_proc; - -int ppesched_init(void) -{ - struct ppesched_discipline *dis; - if (unlikely(pc == -1)) - return -ENOENT; - dis = rcu_dereference_raw(pdt[pc]); - if (!dis->ops->discipline_init) - return 0; - return dis->ops->discipline_init(); -} -EXPORT_SYMBOL_GPL(ppesched_init); - -int ppesched_sched(struct sk_buff *skb, enum path_type dir) -{ - struct ppesched_discipline *dis; - if (unlikely(pc == -1)) { - kfree_skb(skb); - return -EIO; - } - dis = rcu_dereference_raw(pdt[pc]); - if (unlikely(!dis || !dis->ops->discipline_sched)) { - kfree_skb(skb); - return -EIO; - } - return dis->ops->discipline_sched(skb, dir); -} -EXPORT_SYMBOL_GPL(ppesched_sched); - -void ppesched_cleanup(void) -{ - struct ppesched_discipline *dis; - if (unlikely(pc == -1)) - return; - dis = rcu_dereference_raw(pdt[pc]); - if (!dis->ops->discipline_cleanup) - return; - dis->ops->discipline_cleanup(); -} -EXPORT_SYMBOL_GPL(ppesched_cleanup); - -int ppesched_discipline_register(struct ppesched_discipline *pd) -{ - int i; - for (i = 0; i < MAX_SCHED; ++i) { - if (!rcu_dereference_raw(pdt[i])) { - rcu_assign_pointer(pdt[i], pd); - if (unlikely(pc == -1)) { - pc = i; - barrier(); - __module_get(pd->owner); - } - return 0; - } - } - return -ENOMEM; -} -EXPORT_SYMBOL_GPL(ppesched_discipline_register); - -void ppesched_discipline_unregister(struct ppesched_discipline *pd) -{ - int i; - for (i = 0; i < MAX_SCHED; ++i) { - if (rcu_dereference_raw(pdt[i]) == pd) { - rcu_assign_pointer(pdt[i], NULL); - if (i == pc) { - pc = -1; - barrier(); - module_put(pd->owner); - } - break; - } - } -} -EXPORT_SYMBOL_GPL(ppesched_discipline_unregister); - -static int ppesched_procfs_read(char *page, char **start, off_t offset, - int count, int *eof, void *data) -{ - int i; - off_t len = 0; - - len += sprintf(page + len, "running: %s\n", - pc != -1 ? - rcu_dereference_raw(pdt[pc])->name : - "none"); - len += sprintf(page + len, "name addr id\n"); - for (i = 0; i < MAX_SCHED; ++i) { - if (rcu_dereference_raw(pdt[i])) - len += sprintf(page + len, "%s %p %d\n", - rcu_dereference_raw(pdt[i])->name, - rcu_dereference_raw(pdt[i]), i); - } - - *eof = 1; - return len; -} - -static int ppesched_procfs_write(struct file *file, const char __user *buffer, - unsigned long count, void *data) -{ - int ret = count, res; - size_t len; - char *discipline; - - if (count > 64) - return -EINVAL; - len = count; - discipline = kmalloc(len, GFP_KERNEL); - if (!discipline) - return -ENOMEM; - memset(discipline, 0, len); - if (copy_from_user(discipline, buffer, len)) { - ret = -EFAULT; - goto out; - } - discipline[len - 1] = 0; - res = simple_strtol(discipline, NULL, 10); - if (res >= MAX_SCHED || res < -1) { - ret = -EINVAL; - goto out; - } - if (res >= 0) { - if (!rcu_dereference_raw(pdt[res])) { - ret = -EINVAL; - goto out; - } - } - if (pc != -1) - module_put(rcu_dereference_raw(pdt[pc])->owner); - pc = res; - barrier(); - if (pc != -1) - __module_get(rcu_dereference_raw(pdt[pc])->owner); - ret = len; -out: - kfree(discipline); - return ret; -} - -int init_ppesched_system(void) -{ - int i; - for (i = 0; i < MAX_SCHED; ++i) - pdt[i] = NULL; - ppesched_proc = create_proc_entry("ppesched", 0600, lana_proc_dir); - if (!ppesched_proc) - return -ENOMEM; - ppesched_proc->read_proc = ppesched_procfs_read; - ppesched_proc->write_proc = ppesched_procfs_write; - ppesched_proc->data = NULL; - return 0; -} -EXPORT_SYMBOL_GPL(init_ppesched_system); - -void cleanup_ppesched_system(void) -{ - remove_proc_entry("ppesched", lana_proc_dir); -} -EXPORT_SYMBOL_GPL(cleanup_ppesched_system); - diff --git a/src/xt_sched.h b/src/xt_sched.h deleted file mode 100644 index 77c2a51..0000000 --- a/src/xt_sched.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Lightweight Autonomic Network Architecture - * - * Copyright 2011 Daniel Borkmann , - * Swiss federal institute of technology (ETH Zurich) - * Subject to the GPL. - */ - -#ifndef XT_SCHED_H -#define XT_SCHED_H - -#include -#include -#include -#include - -#include "xt_conf.h" -#include "xt_fblock.h" - -extern struct proc_dir_entry *sched_proc_dir; - -struct ppesched_discipline_ops { - int (*discipline_init)(void); - int (*discipline_sched)(struct sk_buff *skb, enum path_type dir); - void (*discipline_cleanup)(void); -}; - -struct ppesched_discipline { - char *name; - struct ppesched_discipline_ops *ops; - struct module *owner; -}; - -extern int ppesched_init(void); -extern int ppesched_sched(struct sk_buff *skb, enum path_type dir); -extern void ppesched_cleanup(void); - -extern int ppesched_discipline_register(struct ppesched_discipline *pd); -extern void ppesched_discipline_unregister(struct ppesched_discipline *pd); - -extern int init_ppesched_system(void); -extern void cleanup_ppesched_system(void); - -#endif /* XT_SCHED_H */ -- 2.11.4.GIT