// SPDX-License-Identifier: GPL-2.0-or-later OR copyleft-next-0.3.1 /* * proc sysctl test driver * * Copyright (C) 2017 Luis R. Rodriguez <mcgrof@kernel.org>
*/
/* * This module provides an interface to the proc sysctl interfaces. This * driver requires CONFIG_PROC_SYSCTL. It will not normally be loaded by the * system unless explicitly requested by name. You can also build this driver * into your kernel.
*/
unregister = register_sysctl("debug/test_sysctl/unregister_error",
test_table_unregister); if (!unregister) return -ENOMEM;
unregister_sysctl_table(unregister); return 0;
}
staticint test_sysctl_run_register_mount_point(void)
{
ctl_headers[TEST_H_MNT]
= register_sysctl_mount_point("debug/test_sysctl/mnt"); if (!ctl_headers[TEST_H_MNT]) return -ENOMEM;
ctl_headers[TEST_H_MNTERROR]
= register_sysctl("debug/test_sysctl/mnt/mnt_error",
test_table_unregister); /* * Don't check the result.: * If it fails (expected behavior), return 0. * If successful (missbehavior of register mount point), we want to see * mnt_error when we run the sysctl test script
*/
staticint test_sysctl_run_register_empty(void)
{ /* Tets that an empty dir can be created */
ctl_headers[TEST_H_EMPTY_ADD]
= register_sysctl("debug/test_sysctl/empty_add", test_table_empty); if (!ctl_headers[TEST_H_EMPTY_ADD]) return -ENOMEM;
/* Test that register on top of an empty dir works */
ctl_headers[TEST_H_EMPTY]
= register_sysctl("debug/test_sysctl/empty_add/empty", test_table_empty); if (!ctl_headers[TEST_H_EMPTY]) return -ENOMEM;
staticint test_sysctl_register_u8_extra(void)
{ /* should fail because it's over */
ctl_headers[TEST_H_U8]
= register_sysctl("debug/test_sysctl", table_u8_over); if (ctl_headers[TEST_H_U8]) return -ENOMEM;
/* should fail because it's under */
ctl_headers[TEST_H_U8]
= register_sysctl("debug/test_sysctl", table_u8_under); if (ctl_headers[TEST_H_U8]) return -ENOMEM;
/* should not fail because it's valid */
ctl_headers[TEST_H_U8]
= register_sysctl("debug/test_sysctl", table_u8_valid); if (!ctl_headers[TEST_H_U8]) return -ENOMEM;
return 0;
}
staticint __init test_sysctl_init(void)
{ int err = 0;
int (*func_array[])(void) = {
test_sysctl_setup_node_tests,
test_sysctl_run_unregister_nested,
test_sysctl_run_register_mount_point,
test_sysctl_run_register_empty,
test_sysctl_register_u8_extra
};
for (int i = 0; !err && i < ARRAY_SIZE(func_array); i++)
err = func_array[i]();
return err;
}
module_init(test_sysctl_init);
staticvoid __exit test_sysctl_exit(void)
{
kfree(test_data.bitmap_0001); for (int i = 0; i < TEST_H_SIZE; i++) { if (ctl_headers[i])
unregister_sysctl_table(ctl_headers[i]);
}
}
module_exit(test_sysctl_exit);
MODULE_AUTHOR("Luis R. Rodriguez ");
MODULE_DESCRIPTION("proc sysctl test driver");
MODULE_LICENSE("GPL");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.