Thank you for the heads up -  this change to selectively enable/disable 
policy table entries is good for SGI too.

Best regards,

Pat

On 9/2/2015 11:21 AM, hotmail wrote:
>
>> Date: Thu, 20 Aug 2015 18:49:08 +0200
>> Subject: Re: [Ipmitool-devel] [PATCH] New PEF policy framework
>> From: zdenek.styb...@gmail.com
>> To: jordan_hargr...@hotmail.com
>> CC: ipmitool-devel@lists.sourceforge.net; p...@sgi.com
>>
>> On Mon, Aug 17, 2015 at 10:46 PM, Jordan Hargrave
>>   wrote:
>>> Some time ago I proposed a patch to enable enabling/disabling individual 
>>> PEF policy entries.
>>> Support for this is needed for one of our utilities.  A new rework of the 
>>> whole PEF framework was
>>> requested.  I'm attaching a patch that (partially) implements this new 
>>> scheme, please review.
>>>
>> Hello Jordan,
>>
>> I'm not aware that rework of the whole PEF framework was prerequisite
>> for the patch you've posted. Patch you've posted has been rejected
>> because 'setpolicy' didn't and doesn't make sense in broad view. As a
>> follow up, new CLI PEF interface with "99%" coverage has been proposed
>> and cooperated on. Yes, discussion has quieted down and I'm to blame.
>> My apologies to Pat Donlin at SGI.
>> Only request that has been made towards you, resp. Dell, was to change
>> 'setpolicy' to 'policy set' which makes much more sense. As far as I'm
>> aware, this was the only condition for the patch to be accepted and
>> merged in. If you've interpreted any of it as a
>> dependency/prerequisite, then I'm sorry.
>>
> Ah well that makes things much easier!  Would something like ipmitool pef 
> policy   and ipmitool pef policy be OK?
>
> Signed-off-by: Jordan Hargrave
> ---
>   doc/ipmitool.1              |  5 +++
>   include/ipmitool/ipmi_pef.h | 14 +++++++++
>   lib/ipmi_pef.c              | 75 
> +++++++++++++++++++++++++++++++++++++++++++--
>   3 files changed, 92 insertions(+), 2 deletions(-)
>
> diff --git a/doc/ipmitool.1 b/doc/ipmitool.1
> index 0d8adcc..2cf7c99 100644
> --- a/doc/ipmitool.1
> +++ b/doc/ipmitool.1
> @@ -2425,6 +2425,11 @@ processed by the BMC, etc).
>   This command lists the PEF policy table entries.  Each policy
>   entry describes an alert destination.  A policy set is a
>   collection of table entries.  PEF alert actions reference policy sets.
> +.TP
> +\fIpolicy\fP
> +.br
> +
> +This command enables or disables individual PEF policy table entries.
>   .TP
>   \fIlist\fP
>   .br
> diff --git a/include/ipmitool/ipmi_pef.h b/include/ipmitool/ipmi_pef.h
> index cdea4ec..2b392ff 100644
> --- a/include/ipmitool/ipmi_pef.h
> +++ b/include/ipmitool/ipmi_pef.h
> @@ -555,6 +555,19 @@ struct pef_cfgparm_policy_table_entry {
>   #ifdef HAVE_PRAGMA_PACK
>   #pragma pack(1)
>   #endif
> +struct pef_cfgparm_set_policy_table_entry
> +{
> +  uint8_t id;
> +  uint8_t sel;
> +  struct pef_policy_entry entry;
> +} ATTRIBUTE_PACKING;
> +#ifdef HAVE_PRAGMA_PACK
> +#pragma pack(0)
> +#endif
> +
> +#ifdef HAVE_PRAGMA_PACK
> +#pragma pack(1)
> +#endif
>   struct pef_cfgparm_system_guid {
>   #define PEF_SYSTEM_GUID_USED_IN_PET 0x01
>       uint8_t data1;
> @@ -936,6 +949,7 @@ BIT_DESC_MAP_LIST,
>   #endif
>   
>   #define IPMI_CMD_GET_PEF_CAPABILITIES 0x10
> +#define IPMI_CMD_SET_PEF_CONFIG_PARMS 0x12
>   #define IPMI_CMD_GET_PEF_CONFIG_PARMS 0x13
>   #define IPMI_CMD_GET_LAST_PROCESSED_EVT_ID 0x15
>   #define IPMI_CMD_GET_SYSTEM_GUID 0x37
> diff --git a/lib/ipmi_pef.c b/lib/ipmi_pef.c
> index 1beebf0..305283d 100644
> --- a/lib/ipmi_pef.c
> +++ b/lib/ipmi_pef.c
> @@ -256,6 +256,56 @@ ipmi_pef_get_policy_table(struct ipmi_intf * intf,
>       return(tbl_size);
>   }
>   
> +static int
> +ipmi_pef_set_policy_table_entry(struct ipmi_intf * intf, int set, struct 
> pef_cfgparm_policy_table_entry *entry)
> +{
> +    struct ipmi_rs *rsp;
> +    struct ipmi_rq req;
> +    struct pef_cfgparm_set_policy_table_entry psel;
> +
> +    memset(&req, 0, sizeof(req));
> +    req.msg.netfn = IPMI_NETFN_SE;
> +    req.msg.cmd = IPMI_CMD_SET_PEF_CONFIG_PARMS;
> +    req.msg.data = &psel;
> +    req.msg.data_len = sizeof(psel);
> +
> +    memset(&psel, 0, sizeof(psel));
> +    psel.id = PEF_CFGPARM_ID_PEF_ALERT_POLICY_TABLE_ENTRY;
> +    psel.sel = set & 0x3F;
> +    memcpy(&psel.entry, &entry->entry, sizeof(entry->entry));
> +
> +    rsp = ipmi_pef_msg_exchange(intf, &req, "Set Alert policy table entry");
> +    if (!rsp) {
> +        lprintf(LOG_ERR, " **Error setting Alert policy table entry");
> +        return -1;
> +    }
> +    return 0;
> +}
> +
> +static void
> +ipmi_pef_policy_enable(struct ipmi_intf * intf, int set, int enable)
> +{
> +    struct pef_cfgparm_policy_table_entry * ptbl = NULL;
> +    int tbl_size;
> +
> +    tbl_size = ipmi_pef_get_policy_table(intf, &ptbl);
> +    if (!tbl_size) {
> +        if (ptbl) {
> +            free(ptbl);
> +        }
> +        return;
> +    }
> +    if (set> 0 && set <= tbl_size) {
> +        if (enable)
> +            ptbl[set-1].entry.policy |= PEF_POLICY_ENABLED;
> +        else
> +            ptbl[set-1].entry.policy &= ~PEF_POLICY_ENABLED;
> +        ipmi_pef_set_policy_table_entry(intf, set, &ptbl[set-1]);
> +    } else {
> +        lprintf(LOG_ERR, "Invalid policy index, valid range = (1..%d)", 
> tbl_size);
> +    }
> +}
> +
>   static void
>   ipmi_pef_print_lan_dest(struct ipmi_intf * intf, uint8_t ch, uint8_t dest)
>   {    /*
> @@ -858,6 +908,12 @@ ipmi_pef_get_info(struct ipmi_intf * intf)
>       ipmi_pef_print_flags(&pef_b2s_actions, P_SUPP, actions);
>   }
>   
> +struct valstr endis[] = {
> +    { .str = "disable", .val = 0x00 },
> +    { .str = "enable", .val = 0x01 },
> +    { .val = 0xFFFF },
> +};
> +
>   int ipmi_pef_main(struct ipmi_intf * intf, int argc, char ** argv)
>   {    /*
>       // PEF subcommand handling
> @@ -871,8 +927,23 @@ int ipmi_pef_main(struct ipmi_intf * intf, int argc, 
> char ** argv)
>           help = 1;
>       else if (!strncmp(argv[0], "status", 6))
>           ipmi_pef_get_status(intf);
> -    else if (!strncmp(argv[0], "policy", 6))
> -        ipmi_pef_list_policies(intf);
> +    else if (!strncmp(argv[0], "policy", 6)) {
> +        if (argc == 3) {
> +            uint16_t pol,en;
> +
> +            if (str2int(argv[1], &pol) != 0 ||
> +                (en = str2val(argv[2], endis)) == 0xFFFF) {
> +                lprintf(LOG_ERR, "Usage: ipmitool pef policy  \n");
> +                return (-1);
> +            }
> +            ipmi_pef_policy_enable(intf, pol, en);
> +        } else if (argc == 1) {
> +            ipmi_pef_list_policies(intf);
> +        } else {
> +            lprintf(LOG_NOTICE, "PEF policy commands: policy | policy  ");
> +            return (-1);
> +        }
> +    }
>       else if (!strncmp(argv[0], "list", 4))
>           ipmi_pef_list_entries(intf);
>       else {


------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel

Reply via email to