## Network protocols

NOTE
It is possible that some properties or resources described in this
section are not implemented in iLO 4 and iLO 5.

This section provides information about the network protocols controlled
by HPE iLO.
The exhaustive list of iLO network protocols can be retrieved from the
standard
 URI 
at `/redfish/v1/Managers/1/NetworkProtocol`.

## Simple Network Management Protocol

HPE iLO supports the Simple Network Management Protocol (SNMP). SNMP
traps are generated by Redfish events posted in the iLO Integrated Management
Logs (IML). iLO SNMP Object Identifiers (OIDs) are defined in the HPE Systems
Insight Manager (SIM)
MIB update kit. To cross reference an SNMP trap with REST alerts information,
see the REST alerts table in the
 iLO user guide.

TIP
If you make a mistake in the following iLOrest examples, you can always
delete property changes in the cache, by reloading the a fresh
schema/data-type (`ilorest select Schema. --refresh` ):

iLOrest

```shell
ilorest select Schema.
ilorest set Property="Bad Value"
ilorest select Schema. --refresh
```

### SNMP enablement

SNMP enablement is performed by setting the `SNMP/ProtocolEnabled` property
to `true`  under the Redfish standard `ManagerNetworkProtocol`
 URI .

Generic PATCH request

```text
PATCH /redfish/v1/Managers/1/NetworkProtocol
```

Body request

```json
{
    "SNMP": {
        "ProtocolEnabled": true
    }
}
```

iLOrest (verbose mode)

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest select ManagerNetworkProtocol
ilorest set SNMP/ProtocolEnabled=True --commit
ilorest logout
```

iLOrest response

```text
Selected option(s): #ManagerNetworkProtocol.v1_0_0.ManagerNetworkProtocol
Added the following patch:
{
  "SNMP/ProtocolEnabled": true
}
Committing changes...
Changes are being made to path: /redfish/v1/Managers/1/NetworkProtocol/

HTTP Response Code: [200]
MessageId: iLO.2.18.ResetRequired
Description: The operation completed successfully.
Message: The operation completed successfully.
Resolution:
iLOrest return code: 0
```

#### SNMPv1 enablement

SNMPv1 is enabled when the `SNMPv1Enabled` key is set to `true`,
under the `/redfish/v1/Managers/1/SnmpService` URI.

NOTE
An iLO reset is required when a PATCH request is performed on that property.

Generic PATCH request

```text
PATCH /redfish/v1/Managers/1/SnmpService
```

Body

```json
{
    "SNMPv1Enabled": true,
    "SNMPv1RequestsEnabled" : true,
    "SNMPv1TrapEnabled" : true

}
```

iLOrest (verbose)

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest set SNMPv1Enabled=False SNMPv1RequestsEnabled=False SNMPv1TrapEnabled=False
ilorest status
ilorest -vv --commit 
ilorest iloreset
```

iLOrest response

```text
HTTP Response Code: [200]
MessageId: Base.1.4.Success
Description: The operation completed successfully.
Message: The operation completed successfully.
Resolution:
iLOrest return code: 0
```

### SNMP configuration

SNMPv3 configuration can only be performed when the SNMP is enabled.
SNMPv1 configuration can only be performed when the SNMP and the
SNMPv1 are enabled.

#### SNMP ports configuration

The SNMP default port number (161) can be modified with a PATCH request
of the `SNMP/Port` property under the Redfish standard
`ManagerNetworkProtocol` URI.

The SNMP default trap port (162) can be modified with a PATCH
request of the `OEM/Hpe/SNMPTrapPort` property under
the `ManagerNetworkProtocol` URI.

Generic PATCH request

```text
PATCH /redfish/v1/Managers/1/NetworkProtocol
```

Body

```json
"SNMP": {
        "Port": <integer>
    },
"Oem": {
        "Hpe": {
            "SNMPTrapPort": <integer>
        }
}
```

iLOrest

```shell
ilorest select ManagerNetworkProtocol.
ilorest set SNMP/Port=4567 Oem/Hpe/SNMPTrapPort=7654
ilorest status
ilorest commit
ilorest iloreset
```

#### SNMP settings

General SNMP settings can be set in under the `HpeiLOSnmpService`
 URI .

Generic PATCH request

```text
PATCH /redfish/v1/Managers/1/SnmpService
```

Body

```json
{
    "Location": "My Location",
    "Contact": "Contact Name",
    "Role": "My role",
    "RoleDetail": "My role details",
    "ReadCommunities": [
        "communitystring1",
        "communitystring2",
        "communitystring3"
    ]
}
```

iLOrest

```shell
ilorest select HpeiLOSnmpService.
ilorest set Location="My Location" Contact="Contact Name"
ilorest set Role="My role" RoleDetail="My role details"
ilorest set ReadCommunities=["CommunityString1","CommunityString2","CommunityString3"]
ilorest status
ilorest commit
ilorest iloreset
```

Warning
A space between the elements of the `ReadCommunities` array leads to the following error:

`'[CommunityString1,' is not a valid setting for 'ReadCommunities', expecting an array`

#### SNMPv3 settings

Specific SNMPv3 settings can be provided under the
`/redfish/v1/Managers/1/SnmpService`
 URI .

Generic PATCH request

```text
PATCH /redfish/v1/Managers/1/SnmpService
```

Body

```json
{
    "SNMPv3EngineID": "0x8000000001020304",
    "SNMPv3InformRetryAttempt": 2,
    "SNMPv3InformRetryIntervalSeconds": 15
}
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest select HpeiLOSnmpService.
ilorest set SNMPv3EngineID="0x8000000001020304" SNMPv3InformRetryAttempt=2 SNMPv3InformRetryIntervalSeconds=15
ilorest status
ilorest commit
ilorest iloreset
```

#### SNMP alerts

SNMP alerts properties can be set under the
`/redfish/v1/Managers/1/SnmpService`
 URI .

The following properties have been added in `HpeiLOSnmpService` version 2.4.0:

- `SNMPv1RequestsEnabled`: Enables/disables (Boolean) iLO to receive
external SNMPv1 requests.
- `SNMPv1TrapEnabled`: Enables/disables (Boolean) iLO to send SNMPv1
traps to the remote management systems configured in the alert destination.
- `SNMPv3RequestsEnabled`: Enables/disables (Boolean) iLO to receive
external SNMPv3 requests.
- `SNMPv3TrapEnabled`: Enables/disables (Boolean) iLO to send SNMPv3
traps to the remote management systems configured in the alert destination.


NOTE
- `SNMPv1Enabled` enables both `SNMPv1RequestsEnabled` and
`SNMPv1TrapEnabled`.
- `AlertsEnabled` enables both `SNMPv1TrapEnabled` and
`SNMPv3TrapEnabled`.
- Enabling either `SNMPv1RequestsEnabled` or `SNMPv1TrapEnabled`
enables `SNMPv1Enabled`.
- Enabling either `SNMPv1TrapEnabled` or `SNMPv3TrapEnabled`
enables `AlertsEnabled`.


Generic PATCH request

```text
PATCH /redfish/v1/Managers/1/SnmpService
```

Body

```json
{
    "TrapSourceHostname": "Manager",
    "AlertsEnabled": true,
    "SNMPv1Enabled": false,
    "Oem": {
        "Hpe": {
            "SNMPColdStartTrapBroadcast": false
        }
    },
    "PeriodicHSATrapConfig": "Disabled"
}
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest select HpeiLOSnmpService.
ilorest set TrapSourceHostname="Manager"
ilorest set AlertsEnabled=True
ilorest set SNMPv1Enabled=False
ilorest set Oem/Hpe/SNMPColdStartTrapBroadcast=False
ilorest set PeriodicHSATrapConfig="Disabled" 
ilorest status
ilorest commit
ilorest reset
```

#### SNMP alert destinations

Add an SNMP alert destination with a POST request in the
`HpeSNMPAlertDestinationCollection` URI.

NOTE
- The `SNMPv1TrapEnabled` option is available when `SNMPv1TrapEnabled`
is enabled in the SNMP Alerts section.
- The `SNMPv3TrapEnabled` option is available when `SNMPv3TrapEnabled`
is enabled in the SNMP Alerts section and at least one SNMPv3 user
is configured.
- The `SNMPv3Inform` option is available when at least one SNMPv3
user is configured.


Generic POST request

```text
POST redfish/v1/Managers/1/SnmpService/SNMPAlertDestinations
```

Body

```json
{
    "AlertDestination": "192.168.87.41",
    "SNMPAlertProtocol": "SNMPv1Trap",
    "TrapCommunity": "public"
}
```

#### SNMPv3 users

SNMPv3 users can be managed under the `HpeSNMPUsersCollection`
 URI .

NOTE
`SNMPv3user`  is available only if the SNMP Protocol is set
to `SNMPv3TrapEnabled` or `SNMPv3Inform`.

Add SNMP user

```text
POST /redfish/v1/Managers/1/SnmpService/SNMPUsers
```

Body

```json
{
    "SecurityName": "snmpuser",
    "AuthProtocol": "SHA",
    "AuthPassphrase": "myauthpassword",
    "PrivacyProtocol": "AES",
    "PrivacyPassphrase": "myPrivacyPassphrase",
    "UserEngineID": "0x8000000001020304"
}
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest select HpeSNMPUsersCollection.
ilorest rawpost SnmpUser.json
ilorest logout

cat SnmpUser.json
{
    "/redfish/v1/Managers/1/SnmpService/SNMPUsers": {
        "SecurityName": "snmpuser",
        "AuthProtocol": "SHA",
        "AuthPassphrase": "myauthpassword",
        "PrivacyProtocol": "AES",
        "PrivacyPassphrase": "myPrivacyPassphrase",
        "UserEngineID": "0x8000000001020304" }
}
```

View the collection of SNMPv3 users:

Generic GET request

```text
GET /redfish/v1/Managers/1/SnmpService/SNMPUsers
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest select HpeSNMPUsersCollection.
ilorest get --json
ilorest logout
```

Body response

```json
{
  "Description": "SNMPv3 Users Collection view",
  "Members": [
    {
      "@odata.id": "/redfish/v1/Managers/1/SnmpService/SNMPUsers/1/"
    },
    {
      "@odata.id": "/redfish/v1/Managers/1/SnmpService/SNMPUsers/2/"
    }
  ],
  "Name": "SNMPv3 User Collection"
}
```

View the properties of all SNMPv3 users:

Generic GET request

```text
GET /redfish/v1/Managers/1/SnmpService/SNMPUsers/?$expand=.
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest --silent rawget '/redfish/v1/Managers/1/SnmpService/SNMPUsers/?$expand=.'
ilorest logout
```

Body response

```json
{
  "@odata.context": "/redfish/v1/$metadata#HpeSNMPUsersCollection.HpeSNMPUsersCollection",
  "@odata.etag": "W/\"A4394AAB\"",
  "@odata.id": "/redfish/v1/Managers/1/SnmpService/SNMPUsers/",
  "@odata.type": "#HpeSNMPUsersCollection.HpeSNMPUsersCollection",
  "Description": "SNMPv3 Users Collection view",
  "Members": [
    {
      "@odata.context": "/redfish/v1/$metadata#HpeSNMPUser.HpeSNMPUser",
      "@odata.id": "/redfish/v1/Managers/1/SnmpService/SNMPUsers/1/",
      "@odata.type": "#HpeSNMPUser.v2_1_0.HpeSNMPUser",
      "AuthProtocol": "MD5",
      "Id": "1",
      "PrivacyProtocol": "DES",
      "SecurityName": "test",
      "UserEngineID": "0x800000E8044D585137323430375032"
    },
    {
      "@odata.context": "/redfish/v1/$metadata#HpeSNMPUser.HpeSNMPUser",
      "@odata.id": "/redfish/v1/Managers/1/SnmpService/SNMPUsers/2/",
      "@odata.type": "#HpeSNMPUser.v2_1_0.HpeSNMPUser",
      "AuthProtocol": "SHA",
      "Id": "2",
      "PrivacyProtocol": "AES",
      "SecurityName": "snmpuser",
      "UserEngineID": "0x8000000001020304"
    }
  ],
  "Members@odata.count": 2,
  "Name": "SNMPv3 User Collection"
}
```

Delete SNMP user

Delete SNMP user request

```text
DELETE /redfish/v1/Managers/1/SnmpService/SNMPUsers/2
```

iLOrest

```shell
ilorest rawdelete --silent --response /redfish/v1/Managers/1/SnmpService/SNMPUsers/2
```

#### Send test alerts

Test alerts can be sent to alert destinations using a POST request towards
`HpeiLOSnmpService.SendSNMPTestAlert` under the
`/redfish/v1/Managers/1/SnmpService`
 URI 
with an empty body.

Send test alerts request

```text
POST /redfish/v1/Managers/1/SnmpService/Actions/HpeiLOSnmpService.SendSNMPTestAlert/
```

Body

```json
{}
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest rawpost TestAlerts.json
ilorest logout

cat TestAlerts.json
{
    "/redfish/v1/Managers/1/SnmpService/Actions/HpeiLOSnmpService.SendSNMPTestAlert/": {}
}
```

## Intelligent Platform Management Interface

HPE iLO is able to control the use of the Intelligent Platform Management
Interface (
IPMI) using the Redfish API.

The following example retrieves the state of IPMI using cURL and iLOrest.

Generic request

```text
GET /redfish/v1/Managers/1/NetworkProtocol/?$select=IPMI
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest get --selector NetworkProtocol. --json
ilorest logout
```

cURL

```shell
curl --insecure --silent --location -u user:password \
     'https://ilo-ip/redfish/v1/Managers/1/NetworkProtocol/?$select=IPMI'
```

Body response

```json
{
  "IPMI": {
    "Port": 623,
    "ProtocolEnabled": true
  }
}
```

### Manage the KCS interface feature for HPE iLO

IPMI over Keyboard Controller Style (KCS) enables management of the
computer system and monitoring of the operations from within the host
Operating System (OS). It is possible to enable or disable
KCS for iLO 6 since version 1.40.

The following example enables the KCS interface using iLOrest and cURL.

Generic request

```text
PATCH /redfish/v1/Managers/1/NetworkProtocol

Workload:
{ 
"Oem": {
    "Hpe":{
      "KcsEnabled": true
        }
      }
}
```

cURL

```shell
curl --insecure --location --silent -u demopaq:password \
     --header 'Content-Type: application/json' \
     --request PATCH 'https://ilo-lio365g11-2/redfish/v1/Managers/1/NetworkProtocol/' \
     --data '{ 
              "Oem": {
                  "Hpe":{
                          "KcsEnabled": true }}
              }'
```

iLOrest

```shell
ilorest login <ilo-ip> -u <ilo-user> -p password
ilorest get Oem/Hpe/KcsEnabled --json
ilorest set Oem/Hpe/KcsEnabled=True --commit
ilorest logout
```

### IPMI in-band management

In-band management operations can fail or be slow when
the IPMI interrupt support is enabled in the
HPE Bios service OEM extension of iLO 6 version 1.10 and later.
Refer to this
customer advisory
for more detail.

The following example disables the `KcsIpmiInterrupt` attribute in the
HPE Bios service subsystem of an HPE iLO 6 based server.
Then it performs a graceful restart of the server.

Generic PATCH request

```text
PATCH /redfish/v1/Systems/1/Bios/Oem/Hpe/Service/Settings

Body:
{
    "Attributes": {
    "KcsIpmiInterrupt": "Disabled"
    }
}
```

Generic Graceful system restart

```text
POST `/redfish/v1/Systems/1/Actions/ComputerSystem.Reset/`

Body:
{
    "ResetType": "GracefulRestart"
}
```

TIP
- More information concerning the HPE Bios service subsystem can be found
in the
[Managing HPE Bios](/docs/redfishservices/ilos/supplementdocuments/biosdoc/)
section.
- After a modification in the BIOS settings (standard or OEM extension) and
the restart of the server, it is a good practice to analyze the
`@Redfish.Settings` object of the current settings area as explained in the
[Redfish error responses and messages](/docs/concepts/errorresponses)
section.