[PATCH v4 07/10] lib: other kernel glue layer code
These files are used to provide the same function calls so that other network stack code keeps untouched. Signed-off-by: Hajime Tazaki Signed-off-by: Christoph Paasch --- arch/lib/capability.c | 25 + arch/lib/filemap.c| 32 ++ arch/lib/fs.c | 70 arch/lib/glue.c | 289 ++ arch/lib/modules.c| 36 +++ arch/lib/pid.c| 29 + arch/lib/print.c | 56 ++ arch/lib/proc.c | 34 ++ arch/lib/random.c | 53 + arch/lib/sysfs.c | 83 +++ arch/lib/vmscan.c | 26 + 11 files changed, 733 insertions(+) create mode 100644 arch/lib/capability.c create mode 100644 arch/lib/filemap.c create mode 100644 arch/lib/fs.c create mode 100644 arch/lib/glue.c create mode 100644 arch/lib/modules.c create mode 100644 arch/lib/pid.c create mode 100644 arch/lib/print.c create mode 100644 arch/lib/proc.c create mode 100644 arch/lib/random.c create mode 100644 arch/lib/sysfs.c create mode 100644 arch/lib/vmscan.c diff --git a/arch/lib/capability.c b/arch/lib/capability.c new file mode 100644 index 000..3a1f301 --- /dev/null +++ b/arch/lib/capability.c @@ -0,0 +1,25 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage + * Hajime Tazaki + */ + +#include "linux/capability.h" + +struct sock; +struct sk_buff; + +int file_caps_enabled = 0; + +int cap_netlink_send(struct sock *sk, struct sk_buff *skb) +{ + return 0; +} + +bool file_ns_capable(const struct file *file, struct user_namespace *ns, +int cap) +{ + return true; +} diff --git a/arch/lib/filemap.c b/arch/lib/filemap.c new file mode 100644 index 000..ce424ff --- /dev/null +++ b/arch/lib/filemap.c @@ -0,0 +1,32 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage + * Hajime Tazaki + * Frederic Urbani + */ + +#include "sim.h" +#include "sim-assert.h" +#include + + +ssize_t generic_file_aio_read(struct kiocb *a, const struct iovec *b, + unsigned long c, loff_t d) +{ + lib_assert(false); + + return 0; +} + +int generic_file_readonly_mmap(struct file *file, struct vm_area_struct *vma) +{ + return -ENOSYS; +} + +ssize_t +generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) +{ + return 0; +} diff --git a/arch/lib/fs.c b/arch/lib/fs.c new file mode 100644 index 000..324e10b --- /dev/null +++ b/arch/lib/fs.c @@ -0,0 +1,70 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage + * Hajime Tazaki + * Frederic Urbani + */ + +#include + +#include "sim-assert.h" + +__cacheline_aligned_in_smp DEFINE_SEQLOCK(mount_lock); +unsigned int dirtytime_expire_interval; + +void __init mnt_init(void) +{ +} + +/* Implementation taken from vfs_kern_mount from linux/namespace.c */ +struct vfsmount *kern_mount_data(struct file_system_type *type, void *data) +{ + static struct mount local_mnt; + static int count = 0; + struct mount *mnt = _mnt; + struct dentry *root = 0; + + /* XXX */ + if (count != 0) return _mnt.mnt; + count++; + + memset(mnt, 0, sizeof(struct mount)); + if (!type) + return ERR_PTR(-ENODEV); + int flags = MS_KERNMOUNT; + char *name = (char *)type->name; + + if (flags & MS_KERNMOUNT) + mnt->mnt.mnt_flags = MNT_INTERNAL; + + root = type->mount(type, flags, name, data); + if (IS_ERR(root)) + return ERR_CAST(root); + + mnt->mnt.mnt_root = root; + mnt->mnt.mnt_sb = root->d_sb; + mnt->mnt_mountpoint = mnt->mnt.mnt_root; + mnt->mnt_parent = mnt; + /* DCE is monothreaded , so we do not care of lock here */ + list_add_tail(>mnt_instance, >d_sb->s_mounts); + + return >mnt; +} +void inode_wait_for_writeback(struct inode *inode) +{ +} +void truncate_inode_pages_final(struct address_space *mapping) +{ +} +int dirtytime_interval_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return -ENOSYS; +} + +unsigned int nr_free_buffer_pages(void) +{ + return 1024; +} diff --git a/arch/lib/glue.c b/arch/lib/glue.c new file mode 100644 index 000..93f72d1 --- /dev/null +++ b/arch/lib/glue.c @@ -0,0 +1,289 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage + * Hajime Tazaki + * Frederic Urbani + */ + +#include /* loff_t */ +#include /* ESPIPE */ +#include /* PAGE_CACHE_SIZE */ +#include/* NAME_MAX */ +#include/* struct kstatfs */ +#include /*
[PATCH v4 07/10] lib: other kernel glue layer code
These files are used to provide the same function calls so that other network stack code keeps untouched. Signed-off-by: Hajime Tazaki taz...@sfc.wide.ad.jp Signed-off-by: Christoph Paasch christoph.paa...@gmail.com --- arch/lib/capability.c | 25 + arch/lib/filemap.c| 32 ++ arch/lib/fs.c | 70 arch/lib/glue.c | 289 ++ arch/lib/modules.c| 36 +++ arch/lib/pid.c| 29 + arch/lib/print.c | 56 ++ arch/lib/proc.c | 34 ++ arch/lib/random.c | 53 + arch/lib/sysfs.c | 83 +++ arch/lib/vmscan.c | 26 + 11 files changed, 733 insertions(+) create mode 100644 arch/lib/capability.c create mode 100644 arch/lib/filemap.c create mode 100644 arch/lib/fs.c create mode 100644 arch/lib/glue.c create mode 100644 arch/lib/modules.c create mode 100644 arch/lib/pid.c create mode 100644 arch/lib/print.c create mode 100644 arch/lib/proc.c create mode 100644 arch/lib/random.c create mode 100644 arch/lib/sysfs.c create mode 100644 arch/lib/vmscan.c diff --git a/arch/lib/capability.c b/arch/lib/capability.c new file mode 100644 index 000..3a1f301 --- /dev/null +++ b/arch/lib/capability.c @@ -0,0 +1,25 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage mathieu.lac...@gmail.com + * Hajime Tazaki taz...@sfc.wide.ad.jp + */ + +#include linux/capability.h + +struct sock; +struct sk_buff; + +int file_caps_enabled = 0; + +int cap_netlink_send(struct sock *sk, struct sk_buff *skb) +{ + return 0; +} + +bool file_ns_capable(const struct file *file, struct user_namespace *ns, +int cap) +{ + return true; +} diff --git a/arch/lib/filemap.c b/arch/lib/filemap.c new file mode 100644 index 000..ce424ff --- /dev/null +++ b/arch/lib/filemap.c @@ -0,0 +1,32 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage mathieu.lac...@gmail.com + * Hajime Tazaki taz...@sfc.wide.ad.jp + * Frederic Urbani + */ + +#include sim.h +#include sim-assert.h +#include linux/fs.h + + +ssize_t generic_file_aio_read(struct kiocb *a, const struct iovec *b, + unsigned long c, loff_t d) +{ + lib_assert(false); + + return 0; +} + +int generic_file_readonly_mmap(struct file *file, struct vm_area_struct *vma) +{ + return -ENOSYS; +} + +ssize_t +generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) +{ + return 0; +} diff --git a/arch/lib/fs.c b/arch/lib/fs.c new file mode 100644 index 000..324e10b --- /dev/null +++ b/arch/lib/fs.c @@ -0,0 +1,70 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage mathieu.lac...@gmail.com + * Hajime Tazaki taz...@sfc.wide.ad.jp + * Frederic Urbani + */ + +#include fs/mount.h + +#include sim-assert.h + +__cacheline_aligned_in_smp DEFINE_SEQLOCK(mount_lock); +unsigned int dirtytime_expire_interval; + +void __init mnt_init(void) +{ +} + +/* Implementation taken from vfs_kern_mount from linux/namespace.c */ +struct vfsmount *kern_mount_data(struct file_system_type *type, void *data) +{ + static struct mount local_mnt; + static int count = 0; + struct mount *mnt = local_mnt; + struct dentry *root = 0; + + /* XXX */ + if (count != 0) return local_mnt.mnt; + count++; + + memset(mnt, 0, sizeof(struct mount)); + if (!type) + return ERR_PTR(-ENODEV); + int flags = MS_KERNMOUNT; + char *name = (char *)type-name; + + if (flags MS_KERNMOUNT) + mnt-mnt.mnt_flags = MNT_INTERNAL; + + root = type-mount(type, flags, name, data); + if (IS_ERR(root)) + return ERR_CAST(root); + + mnt-mnt.mnt_root = root; + mnt-mnt.mnt_sb = root-d_sb; + mnt-mnt_mountpoint = mnt-mnt.mnt_root; + mnt-mnt_parent = mnt; + /* DCE is monothreaded , so we do not care of lock here */ + list_add_tail(mnt-mnt_instance, root-d_sb-s_mounts); + + return mnt-mnt; +} +void inode_wait_for_writeback(struct inode *inode) +{ +} +void truncate_inode_pages_final(struct address_space *mapping) +{ +} +int dirtytime_interval_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return -ENOSYS; +} + +unsigned int nr_free_buffer_pages(void) +{ + return 1024; +} diff --git a/arch/lib/glue.c b/arch/lib/glue.c new file mode 100644 index 000..93f72d1 --- /dev/null +++ b/arch/lib/glue.c @@ -0,0 +1,289 @@ +/* + * glue code for library version of Linux kernel + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage mathieu.lac...@gmail.com + * Hajime Tazaki