1 #pragma once
2 
3 #include <span>
4 
5 namespace phosphor
6 {
7 namespace network
8 {
9 namespace ncsi
10 {
11 
12 constexpr auto DEFAULT_VALUE = -1;
13 constexpr auto NONE = 0;
14 
15 /* @brief  This function will ask underlying NCSI driver
16  *         to send an OEM command (command type 0x50) with
17  *         the specified payload as the OEM data.
18  *         This function talks with the NCSI driver over
19  *         netlink messages.
20  * @param[in] ifindex - Interface Index.
21  * @param[in] package - NCSI Package.
22  * @param[in] channel - Channel number with in the package.
23  * @param[in] opcode  - NCSI Send Command sub-operation
24  * @param[in] payload - OEM data to send.
25  * @returns 0 on success and negative value for failure.
26  */
27 int sendOemCommand(int ifindex, int package, int channel, int opcode,
28                    std::span<const unsigned char> payload);
29 
30 /* @brief  This function will ask underlying NCSI driver
31  *         to set a specific  package or package/channel
32  *         combination as the preferred choice.
33  *         This function talks with the NCSI driver over
34  *         netlink messages.
35  * @param[in] ifindex - Interface Index.
36  * @param[in] package - NCSI Package.
37  * @param[in] channel - Channel number with in the package.
38  * @returns 0 on success and negative value for failure.
39  */
40 int setChannel(int ifindex, int package, int channel);
41 
42 /* @brief  This function will ask underlying NCSI driver
43  *         to clear any preferred setting from the given
44  *         interface.
45  *         This function talks with the NCSI driver over
46  *         netlink messages.
47  * @param[in] ifindex - Interface Index.
48  * @returns 0 on success and negative value for failure.
49  */
50 int clearInterface(int ifindex);
51 
52 /* @brief  This function is used to dump all the info
53  *         of the package and the channels underlying
54  *         the package.
55  * @param[in] ifindex - Interface Index.
56  * @param[in] package - NCSI Package.
57  * @returns 0 on success and negative value for failure.
58  */
59 int getInfo(int ifindex, int package);
60 
61 /* @brief  This function assigns a mask controlling responses to AEN from a
62  * package.
63  * @param[in] ifindex - Interface Index.
64  * @param[in] mask - A 32-bit mask integer
65  * @returns 0 on success and negative value for failure.
66  */
67 int setPackageMask(int ifindex, unsigned int mask);
68 
69 /* @brief  This function sets the AEN mask for the channels inside the selected
70  * package.
71  * @param[in] ifindex - Interface Index.
72  * @param[in] package - NCSI Package.
73  * @param[in] mask - A 32-bit mask integer
74  * @returns 0 on success and negative value for failure.
75  */
76 int setChannelMask(int ifindex, int package, unsigned int mask);
77 
78 } // namespace ncsi
79 } // namespace network
80 } // namespace phosphor
81