diff options
author | Michael Brown | 2015-07-22 03:56:49 +0200 |
---|---|---|
committer | Michael Brown | 2015-07-22 22:17:47 +0200 |
commit | d0325b1da64c8ff611cd4c3151e266dd2685c462 (patch) | |
tree | aa8daf27408752e2c88cba632fe8443682922b50 /src/core/fault.c | |
parent | [tcp] Ensure FIN is actually sent if connection is closed while idle (diff) | |
download | ipxe-d0325b1da64c8ff611cd4c3151e266dd2685c462.tar.gz ipxe-d0325b1da64c8ff611cd4c3151e266dd2685c462.tar.xz ipxe-d0325b1da64c8ff611cd4c3151e266dd2685c462.zip |
[fault] Generalise NETDEV_DISCARD_RATE fault injection mechanism
Provide a generic inject_fault() function that can be used to inject
random faults with configurable probabilities.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/fault.c')
-rw-r--r-- | src/core/fault.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/core/fault.c b/src/core/fault.c new file mode 100644 index 00000000..91289fde --- /dev/null +++ b/src/core/fault.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2015 Michael Brown <mbrown@fensystems.co.uk>. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * 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 Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * You can also choose to distribute this program under the terms of + * the Unmodified Binary Distribution Licence (as given in the file + * COPYING.UBDL), provided that you have satisfied its requirements. + */ + +FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); + +#include <stdlib.h> +#include <errno.h> +#include <ipxe/fault.h> + +/** @file + * + * Fault injection + * + */ + +/** + * Inject fault with a specified probability + * + * @v rate Reciprocal of fault probability (must be non-zero) + * @ret rc Return status code + */ +int inject_fault_nonzero ( unsigned int rate ) { + + /* Do nothing unless we want to inject a fault now */ + if ( ( random() % rate ) != 0 ) + return 0; + + /* Generate error number here so that faults can be injected + * into files that don't themselves have error file + * identifiers (via errfile.h). + */ + return -EFAULT; +} |