########################################
#
# Macros for switching between source policy
# and loadable policy module support
#
##############################
#
# For adding the module statement
#
define(`policy_module',`
ifdef(`monolithic_policy',`',`
module $1 $2;
')
')
##############################
#
# For use in interfaces, to optionally insert a requires block
#
define(`requires_block_template',`
ifdef(`monolithic_policy',`',`
require {
$1
}
')
')
##############################
#
# In the future interfaces could be in loadable modules
#
# module_interface(name,rules)
#
define(`module_interface',`
define(`$1',`
requires_block_template(`$1'_depend)
$2
')
')
##############################
#
# Optional policy handling
#
define(`optional_policy',`
ifdef(`monolithic_policy',`
ifdef(`$1',$2,$3)
',`
optional {
$2
} else {
$3
}
')
')
##############################
#
# Determine if we should use the default
# tunable value as specified by the policy
# or if the override value should be used
#
define(`dflt_or_overr',`ifdef(`$1',$1,$2)')
##############################
#
# Tunable declaration
#
define(`gen_tunable',`
ifdef(`monolithic_policy',`
bool $1 dflt_or_overr(`$1'_conf,$2);
',`
# loadable module tunable
# declaration will go here
# for $1 $2
')
')
##############################
#
# Tunable policy handling
#
define(`tunable_policy',`
ifdef(`monolithic_policy',`
if (`$1') {
$2
} else {
$3
}
',`
optional {
require { `$1' }
$2
} else {
$3
}
')
')