mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
Compare commits
1261 Commits
IPMITOOL_1
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
be11d948f8 | ||
|
4b791f8bf6 | ||
|
9328748672 | ||
|
26b088193a | ||
|
9dfdf14270 | ||
|
707a2980f6 | ||
|
966d6e80b0 | ||
|
206dba615d | ||
|
8f0946a81e | ||
|
63d59a50a6 | ||
|
f033b5549e | ||
|
1edb0e27e4 | ||
|
4519b4baac | ||
|
19d78782d7 | ||
|
46fd8d942c | ||
|
a1dc78c456 | ||
|
4d25a93f49 | ||
|
65ba015f5c | ||
|
4d4f29f0b6 | ||
|
5ac7f6a54e | ||
|
a24a512bdd | ||
|
39ca56bf33 | ||
|
08151adef3 | ||
|
86ef8fb091 | ||
|
66cda7e18f | ||
|
15418696ea | ||
|
7c47cf75f4 | ||
|
b7adc1dcaf | ||
|
11c7605c0d | ||
|
5cf436056f | ||
|
cdac4e07f7 | ||
|
cd57365fc4 | ||
|
351dad24a2 | ||
|
fb47ae8d7c | ||
|
50479484a2 | ||
|
9a1c0e68ba | ||
|
1f429f1ed7 | ||
|
59b7d6cf8f | ||
|
6b1ce6c1ac | ||
|
6a3ded7333 | ||
|
61bb233c5b | ||
|
fb176a1995 | ||
|
d88bbf3c41 | ||
|
69cdef116a | ||
|
9a86189425 | ||
|
5a36080f92 | ||
|
682fec09ef | ||
|
e7550f722c | ||
|
d674bfdc9a | ||
|
050f5da631 | ||
|
7fd7c0f2ba | ||
|
e78144d2c7 | ||
|
7108884793 | ||
|
1245aaa387 | ||
|
50d8c36edf | ||
|
aee377bead | ||
|
b302d8202c | ||
|
3452cf1ca2 | ||
|
f3ffa616e6 | ||
|
16f937a117 | ||
|
3a1a9cb283 | ||
|
239ef6a4ef | ||
|
c6a0baee84 | ||
|
bc13db6304 | ||
|
8838e4b0e2 | ||
|
055719b7b9 | ||
|
38b120eb5a | ||
|
01b53a013b | ||
|
0cd847579f | ||
|
2158e6ea49 | ||
|
1f92c9ee23 | ||
|
b18619e14e | ||
|
84469a9c54 | ||
|
956ae2b372 | ||
|
e3fc775d26 | ||
|
6e037d6bfb | ||
|
9d5ea21df7 | ||
|
dfe17311d6 | ||
|
b97a110721 | ||
|
284adfe2e2 | ||
|
2a17967159 | ||
|
c3939dac2c | ||
|
f80effb1fc | ||
|
7ccea283dd | ||
|
d45572d71e | ||
|
9452be8718 | ||
|
41d7026946 | ||
|
840fb1cbb4 | ||
|
e824c23316 | ||
|
7a66d8725d | ||
|
63dd71c39c | ||
|
e60eac12cc | ||
|
dec04e79fd | ||
|
d9adbf12f1 | ||
|
5647cd16d2 | ||
|
42a023ff07 | ||
|
58c9263a28 | ||
|
0663814eec | ||
|
aa72d9c426 | ||
|
0854344db5 | ||
|
4b89f1b42d | ||
|
0e3e436eb6 | ||
|
eed9d5950e | ||
|
4dc962b614 | ||
|
6940a6717a | ||
|
51a2ab8180 | ||
|
af062a9a5e | ||
|
1724b031b3 | ||
|
9006f2b26d | ||
|
b7db637984 | ||
|
82d6629a66 | ||
|
c396a310ba | ||
|
002e1d95f5 | ||
|
2ee7aca4e4 | ||
|
efd28d1bc1 | ||
|
d95775288d | ||
|
ef78ef3792 | ||
|
2676ae43fd | ||
|
54abbaf0e8 | ||
|
bd0475ce4a | ||
|
b397a07e9e | ||
|
8071cf7389 | ||
|
ca7767793e | ||
|
a45704e5ea | ||
|
94f7646a8e | ||
|
62a04390e1 | ||
|
de1d5c9924 | ||
|
73d6af5782 | ||
|
c9510635d7 | ||
|
e11f463b4e | ||
|
619a02cf5d | ||
|
e65a96b38d | ||
|
9fa01f1a54 | ||
|
432ea31804 | ||
|
12e2f5da63 | ||
|
d818c2ff85 | ||
|
cdd9d51c5f | ||
|
95038ba01b | ||
|
b0d84e0f15 | ||
|
1b636434a6 | ||
|
400622760f | ||
|
b7b455a38c | ||
|
fa8e2ced19 | ||
|
55ec2df41f | ||
|
48f4fba39a | ||
|
df076b9547 | ||
|
51634fd77c | ||
|
3bfa1da201 | ||
|
08348f1b72 | ||
|
a8b3b6282b | ||
|
eb5f26060a | ||
|
feecd2bbf4 | ||
|
be3d57c013 | ||
|
f64044a3de | ||
|
3737b035e8 | ||
|
6b003c3852 | ||
|
8991f5a9a0 | ||
|
49384e47be | ||
|
6dcb168442 | ||
|
1c4a00d26b | ||
|
aef8a1ccb4 | ||
|
81761e6f60 | ||
|
715c7b8a1f | ||
|
92ee477cde | ||
|
6d515dd06b | ||
|
7941806a9b | ||
|
4631d3f942 | ||
|
272d9d0d9b | ||
|
0ca9c66b84 | ||
|
8b6d127bb1 | ||
|
34fc86bd75 | ||
|
9ec2232321 | ||
|
64727f59c4 | ||
|
5183b2c288 | ||
|
83fee27624 | ||
|
3e0ecc5edc | ||
|
8ea6094118 | ||
|
d6d9c85139 | ||
|
9a55136bfb | ||
|
4ac93853a6 | ||
|
a4c1040420 | ||
|
576d4855d9 | ||
|
f2780c5d86 | ||
|
dc9b4ebfc9 | ||
|
6e2b688e24 | ||
|
6c3d4b56c9 | ||
|
4f05b95f6c | ||
|
f0d5c17ea7 | ||
|
a4ac8ce4ab | ||
|
65a2c548d8 | ||
|
1283382e82 | ||
|
7772254b62 | ||
|
a8862d7508 | ||
|
081bde8e1b | ||
|
9e05c0b120 | ||
|
6f336d04f1 | ||
|
9d49a6edfe | ||
|
c70665c3d1 | ||
|
2ed677c388 | ||
|
03d2b53c97 | ||
|
4c155320be | ||
|
40d52b5fa1 | ||
|
0b6abe8cd9 | ||
|
f43a78bfc3 | ||
|
b44ec2fb65 | ||
|
e9716e216d | ||
|
f3ef88724f | ||
|
9ecfb762bd | ||
|
bb1a4cc805 | ||
|
232773d171 | ||
|
a8f3413dc2 | ||
|
29e7d26edb | ||
|
7747d86cc4 | ||
|
5491b12596 | ||
|
3db2bf6c4b | ||
|
5a684b54ed | ||
|
6d6411d2fc | ||
|
5c033c06ab | ||
|
72b4b25b05 | ||
|
3aade24297 | ||
|
329ebdff84 | ||
|
6ee52071dd | ||
|
249e092967 | ||
|
b3d258b234 | ||
|
928716244d | ||
|
2de8a5e1a9 | ||
|
861ffb4680 | ||
|
0310208383 | ||
|
e8e94d8976 | ||
|
e49a20eece | ||
|
6c00d448d5 | ||
|
2a78ff2482 | ||
|
27f2f00dc6 | ||
|
f222df3081 | ||
|
8c0e76c21a | ||
|
432f06db3f | ||
|
564aef2aff | ||
|
ef7564a7ac | ||
|
724f7329a3 | ||
|
f498e3e296 | ||
|
6d9c540f6b | ||
|
60723084e6 | ||
|
9d41136c9b | ||
|
ecb4cfbff8 | ||
|
1664902525 | ||
|
f004b4b719 | ||
|
ba01dc84b4 | ||
|
497f7767cd | ||
|
7b0302cef5 | ||
|
840f573083 | ||
|
41fa699ae9 | ||
|
b35a634908 | ||
|
bc7d23761d | ||
|
e45dc6234b | ||
|
5db314f694 | ||
|
77fe563503 | ||
|
7b102293e8 | ||
|
b57487e360 | ||
|
80345ac56a | ||
|
0ea110a247 | ||
|
076ffb5650 | ||
|
b5ce925744 | ||
|
1487681b8c | ||
|
75a79e164d | ||
|
2d4762d573 | ||
|
2cc196d518 | ||
|
89cffb984b | ||
|
3f7e82a6b4 | ||
|
c6cd49ea37 | ||
|
052655cd91 | ||
|
fa2c1550b9 | ||
|
51198a1749 | ||
|
cc9a6b3964 | ||
|
ea471ed5fa | ||
|
e30c357db7 | ||
|
95eb252ecd | ||
|
2c99bf69ec | ||
|
34711329c2 | ||
|
2f76ab3d3a | ||
|
7f8d37493f | ||
|
f9211f8ed9 | ||
|
ea46724878 | ||
|
9a6ba64651 | ||
|
f8a711b9e8 | ||
|
fcf7445bce | ||
|
a3bec1d365 | ||
|
8bd9659101 | ||
|
9341982a38 | ||
|
4ecac48c68 | ||
|
6d8ad594cc | ||
|
a203644728 | ||
|
d56220f81f | ||
|
c89be0354a | ||
|
0fdfbce8b6 | ||
|
2153bd7aa3 | ||
|
9b1a1a1e82 | ||
|
0ffe39dedc | ||
|
7e991a18e0 | ||
|
b42c16d9dc | ||
|
55834ec3aa | ||
|
a7b0c213f9 | ||
|
70253df032 | ||
|
ec8ba928d4 | ||
|
f62a16f7f2 | ||
|
681bc21d32 | ||
|
fe2fcaf3ef | ||
|
27ac0c15ac | ||
|
8ca47f21ca | ||
|
b74c20c5d5 | ||
|
997b3ea328 | ||
|
ebe6b0ce48 | ||
|
b44366e92d | ||
|
e88e5c8186 | ||
|
a65b49c387 | ||
|
107e6affd0 | ||
|
5fca596492 | ||
|
244ce02f91 | ||
|
ccfa5aec4f | ||
|
eb94a394ba | ||
|
1636dbcf0c | ||
|
9f2072e6c3 | ||
|
d57bf32668 | ||
|
0d6a45357b | ||
|
d1b0e68515 | ||
|
4520b6ff0e | ||
|
a40737f856 | ||
|
a40d51abff | ||
|
9fd4dedd37 | ||
|
baa2c08ab3 | ||
|
955a875274 | ||
|
5d271b0f67 | ||
|
954859e330 | ||
|
19423c68d0 | ||
|
0f896e36f2 | ||
|
0008072590 | ||
|
aeba39bffc | ||
|
f3f4361568 | ||
|
aede0cee75 | ||
|
61d2f24090 | ||
|
3123ce01b5 | ||
|
f70a19cf63 | ||
|
02cdde0264 | ||
|
19293f08df | ||
|
c7169bc27e | ||
|
d6ca800da2 | ||
|
8fe8a5c74c | ||
|
9639cb3fa1 | ||
|
d65658aacc | ||
|
4648843f81 | ||
|
24ebe2fed9 | ||
|
2b8974fb22 | ||
|
38241decc7 | ||
|
a6a67e5e9c | ||
|
ac646c329b | ||
|
25e39b337c | ||
|
cacdd1b6ec | ||
|
eb5c73c04e | ||
|
55b024f573 | ||
|
e1897e2a1d | ||
|
9289aeb8c2 | ||
|
4e707af583 | ||
|
dc5dead291 | ||
|
b8ca3cac3a | ||
|
a74e837562 | ||
|
6a196c4a6a | ||
|
909fc7815c | ||
|
65ea078bdf | ||
|
89dbad1655 | ||
|
9020b67347 | ||
|
f62b924cb4 | ||
|
8055e0d9fb | ||
|
f67a7a3b2f | ||
|
ac1b3e1d46 | ||
|
336b2cb1ab | ||
|
2c3a876a73 | ||
|
37307c93e9 | ||
|
c9e3e6a01b | ||
|
603c14274a | ||
|
14368335b2 | ||
|
c56b5c9667 | ||
|
718a242205 | ||
|
636a785d82 | ||
|
c38ecd063f | ||
|
b6d0afb0f6 | ||
|
5be090f047 | ||
|
607cfe6f47 | ||
|
999cd0ad91 | ||
|
ffeb535db8 | ||
|
4a8691f477 | ||
|
c04aa9bb4e | ||
|
329281bbce | ||
|
e2c5b322d8 | ||
|
13a2a29156 | ||
|
3412d86143 | ||
|
a98eedb272 | ||
|
372b458e0f | ||
|
0caa68115e | ||
|
a5c1120dbb | ||
|
1add1486f9 | ||
|
89e9e63443 | ||
|
30becb3588 | ||
|
0d8f9a7453 | ||
|
ff80a188f3 | ||
|
169d9ac3fc | ||
|
6dec83ff5d | ||
|
c87aa0b96a | ||
|
fb6e311d27 | ||
|
24fd406506 | ||
|
a585af7e0c | ||
|
e8450850e3 | ||
|
2d79e69f5f | ||
|
259500e127 | ||
|
70099a3c40 | ||
|
82f6175dc7 | ||
|
d12b3b4870 | ||
|
ace0e646a1 | ||
|
eb54136775 | ||
|
9caa78be38 | ||
|
925a2fe55c | ||
|
531569ec62 | ||
|
ce861658c0 | ||
|
f1c6118c72 | ||
|
d5c2e976d4 | ||
|
7a854623aa | ||
|
fd5fdc59f2 | ||
|
4725cfd6d9 | ||
|
5a30d18af2 | ||
|
11bbf18345 | ||
|
026a8b6fce | ||
|
410606e868 | ||
|
8081427543 | ||
|
8f1f31cfdc | ||
|
90e2134413 | ||
|
66eee40df4 | ||
|
a6d47ceba4 | ||
|
21151953a5 | ||
|
b591bc2ab7 | ||
|
0e99dafa12 | ||
|
4c5058cdc3 | ||
|
f35ed010f0 | ||
|
512ec41ab4 | ||
|
b88a523ded | ||
|
75843864ba | ||
|
45c54aad0e | ||
|
32c4690950 | ||
|
03d8aa1882 | ||
|
d874267e9b | ||
|
c59e7247dd | ||
|
88891f69d6 | ||
|
aabd9eb1ac | ||
|
82a0caa38b | ||
|
55b1a41855 | ||
|
c56458da18 | ||
|
ce3f35d9d9 | ||
|
4dfb15281e | ||
|
7bd7c4fdd1 | ||
|
f0acdf1b50 | ||
|
ece5e55745 | ||
|
99721b52e4 | ||
|
0b54fac782 | ||
|
312f95930d | ||
|
d36cfcb817 | ||
|
33f9336e85 | ||
|
6febd10121 | ||
|
6b8d55d68b | ||
|
12b85b3c7b | ||
|
0ff2d6e464 | ||
|
dab7f5bf81 | ||
|
6c3f60e57c | ||
|
278dc84b22 | ||
|
0801b4588d | ||
|
56aa025dc2 | ||
|
238d3c4ea9 | ||
|
69f668309b | ||
|
585cb7c83d | ||
|
708be8bc45 | ||
|
d6deeb264e | ||
|
bcb96209c5 | ||
|
8227384c02 | ||
|
39fb1af285 | ||
|
faae8fd247 | ||
|
b6ec5072f4 | ||
|
fb36c69391 | ||
|
d099dca9c5 | ||
|
af276d4082 | ||
|
e4be291c65 | ||
|
bb35d370ba | ||
|
31f9d4c635 | ||
|
6d1afbf3a7 | ||
|
d9acbc4cd0 | ||
|
9811f79eae | ||
|
2d66f8d5cf | ||
|
8775af38f5 | ||
|
9fc4a39fda | ||
|
a6957f875c | ||
|
4ef4618366 | ||
|
8ac8361aca | ||
|
fb69b5dc9e | ||
|
c2e65d0dce | ||
|
12eeca602c | ||
|
c076fde0a6 | ||
|
ecfaeb2706 | ||
|
61db4df637 | ||
|
e37e3ab7de | ||
|
c97dbd3461 | ||
|
48117f5ddf | ||
|
70984dcad5 | ||
|
ce02ffaf2a | ||
|
3105812a44 | ||
|
148d0e0904 | ||
|
6ca88cb687 | ||
|
6d4e2bb632 | ||
|
104a7176ac | ||
|
d9f89a8da0 | ||
|
0a1f5c03e5 | ||
|
140add9d77 | ||
|
0562c809af | ||
|
a87b2ccc67 | ||
|
ad77da2065 | ||
|
6e6a04f971 | ||
|
befb21497f | ||
|
1d1ce49bf4 | ||
|
50bd7d01a8 | ||
|
4d3decc4c0 | ||
|
f8ce85ee6c | ||
|
2aa5d8c902 | ||
|
3c34aa0e1d | ||
|
a58a627fae | ||
|
aaf98b89d5 | ||
|
7cd86aaf1e | ||
|
dd4cab8153 | ||
|
d671052143 | ||
|
e9c3de03c3 | ||
|
1cf65c3236 | ||
|
0eaa2eae51 | ||
|
f56d740d98 | ||
|
342f44b9f3 | ||
|
e1c7b532bd | ||
|
3314024867 | ||
|
15499d014f | ||
|
21fbd0e967 | ||
|
deb9a4ed5d | ||
|
58837647c2 | ||
|
5c85c7bc61 | ||
|
aa8bac2da2 | ||
|
2b15969dcb | ||
|
7560d4f2f4 | ||
|
859e8a4576 | ||
|
f49c9eec53 | ||
|
a6f34c9029 | ||
|
bee3fda656 | ||
|
737b801768 | ||
|
96b19bb62d | ||
|
9372d2e34e | ||
|
9babab10f3 | ||
|
58d510f90f | ||
|
ea49700ec1 | ||
|
732be1b968 | ||
|
2f57897501 | ||
|
d79b0e05af | ||
|
3b15a7c0e2 | ||
|
3f508629a5 | ||
|
3473670051 | ||
|
aefd287222 | ||
|
6d25903a0b | ||
|
26da519310 | ||
|
edfee17f21 | ||
|
b37b914973 | ||
|
4e4a92100c | ||
|
8f7837364b | ||
|
be7917f9f5 | ||
|
a7d3bda08d | ||
|
d531785a23 | ||
|
eeeb973e39 | ||
|
166ae1da23 | ||
|
4f0967779e | ||
|
9d88837ef3 | ||
|
824c0ed4a0 | ||
|
7ea04d8f77 | ||
|
8d5e8fcf7a | ||
|
2c7526be6b | ||
|
a88db0d181 | ||
|
42aba7eb4f | ||
|
23e9340b49 | ||
|
707d77ffbc | ||
|
7584b96c1d | ||
|
cc85ce1333 | ||
|
2c7a5f91ef | ||
|
9e3dba7e97 | ||
|
176774cf9f | ||
|
cab450a052 | ||
|
250eb15f92 | ||
|
02e4a0361c | ||
|
ca5cc560f6 | ||
|
b4a9d2f9a2 | ||
|
8d44c55feb | ||
|
c18ec02f33 | ||
|
b0aad15d67 | ||
|
adbf585bd4 | ||
|
9393bf0133 | ||
|
2c2844ac03 | ||
|
c186e2a681 | ||
|
e02ed2ca2c | ||
|
a06f8a26d4 | ||
|
a324db391c | ||
|
b086e876d7 | ||
|
555a08ece0 | ||
|
696ccb0787 | ||
|
86cb5ee175 | ||
|
99fff91f9d | ||
|
df3e3c7969 | ||
|
135977a497 | ||
|
4e220bebb0 | ||
|
4698e667f5 | ||
|
ff1dbe3d5b | ||
|
d42890ef17 | ||
|
2d7fe32687 | ||
|
3a852a8849 | ||
|
c9e047c334 | ||
|
6cf6b4b845 | ||
|
36c11f6033 | ||
|
5dc9585e77 | ||
|
0b97d32c25 | ||
|
5949b19d44 | ||
|
0cd8f46c42 | ||
|
2ff745286b | ||
|
f6cabfb089 | ||
|
d3ca7cb090 | ||
|
6871fe1c8e | ||
|
b9a0c5a091 | ||
|
1cc4ba699d | ||
|
b779439ad0 | ||
|
63ef18e6e0 | ||
|
935b215514 | ||
|
cd524c2d25 | ||
|
e24c7f75f2 | ||
|
da4b779adf | ||
|
aca8d6ad7b | ||
|
5416af78a5 | ||
|
770e61663f | ||
|
22f294fc27 | ||
|
a675601da4 | ||
|
645120f545 | ||
|
2df9ca914f | ||
|
a5d55b5d51 | ||
|
f2ba7fcd60 | ||
|
24923222f6 | ||
|
5bf68a4769 | ||
|
4e2ac7d097 | ||
|
d5d86d4dcb | ||
|
0a4a5cafbc | ||
|
043c42160e | ||
|
49879b387c | ||
|
38121041c1 | ||
|
d8f27165d1 | ||
|
5a1e81a948 | ||
|
f12b976ebc | ||
|
0dddcfe450 | ||
|
700658e91e | ||
|
3df72b68bc | ||
|
068bcb02e4 | ||
|
52634a708f | ||
|
2b08fd405e | ||
|
fb3c6f292e | ||
|
d02492f1c7 | ||
|
9517cb332b | ||
|
ae96dd3229 | ||
|
968f5d6552 | ||
|
f4730e1f67 | ||
|
b782311e10 | ||
|
45d0a4255a | ||
|
ac9513025c | ||
|
60a3e63429 | ||
|
f19ed0a90b | ||
|
7a0b451fd7 | ||
|
a8119d13a8 | ||
|
f56cea1253 | ||
|
7b5683d85d | ||
|
80c03570ac | ||
|
6de0796079 | ||
|
18aadc30d0 | ||
|
08f50ad301 | ||
|
b803224398 | ||
|
5d3c64f028 | ||
|
942dcb71d8 | ||
|
29af592773 | ||
|
ada4b48baf | ||
|
47831b3c15 | ||
|
efdeb12724 | ||
|
c7412e5815 | ||
|
041d8e4bf8 | ||
|
6a02cccb70 | ||
|
3d9c5ae746 | ||
|
49350157fe | ||
|
c6f6550f27 | ||
|
ad86adac54 | ||
|
f04ccaf79e | ||
|
fa74f3bf3a | ||
|
8e95964938 | ||
|
558bf55c41 | ||
|
393ae97425 | ||
|
ee6c9be382 | ||
|
5177966867 | ||
|
f6dbaf231b | ||
|
8cd3acb188 | ||
|
2c6ca03f8a | ||
|
aebc7d3616 | ||
|
157132be8c | ||
|
8525fdd2a3 | ||
|
f8cecaa71a | ||
|
a771107c47 | ||
|
afd015709b | ||
|
bfba2f83f5 | ||
|
8e94374cf1 | ||
|
ced5794e48 | ||
|
a298d2e704 | ||
|
2d71d428f3 | ||
|
2e5fbc878b | ||
|
8b7969a46f | ||
|
04ba23bc5d | ||
|
977c587fde | ||
|
dd377108ee | ||
|
4aea72e46f | ||
|
39bcb37d14 | ||
|
7770739372 | ||
|
2ac947f6e1 | ||
|
c94c7a5c86 | ||
|
4fdbe5bbd0 | ||
|
c49bc06c39 | ||
|
55524327ce | ||
|
85ff7dc46a | ||
|
8c5013b0ba | ||
|
ea8ce15131 | ||
|
6d89531096 | ||
|
e56e914866 | ||
|
cee8fc659a | ||
|
25fa0f80ae | ||
|
22e38bc46f | ||
|
3bd53a2f78 | ||
|
30e4efe8a4 | ||
|
bf8acad458 | ||
|
2db7f5f6b9 | ||
|
71dea69efc | ||
|
9f51d8f188 | ||
|
8a40297308 | ||
|
fb5d8559e6 | ||
|
2a260d32e9 | ||
|
94c0bd0a6c | ||
|
3cb937f15e | ||
|
edc700ed9a | ||
|
287b313e26 | ||
|
47d53000ce | ||
|
66399810f0 | ||
|
0ab78dbf02 | ||
|
c048c9f311 | ||
|
c32228d7c1 | ||
|
a855c37619 | ||
|
6a66405177 | ||
|
4a4331ef6d | ||
|
41288eb5e4 | ||
|
dbd2db71f2 | ||
|
a472c382f4 | ||
|
e8125c2405 | ||
|
c0f41fa647 | ||
|
5c74d2935e | ||
|
cd6b7039f0 | ||
|
b4cb02a4d9 | ||
|
91fdb17260 | ||
|
2302e83db5 | ||
|
b0294b96fd | ||
|
f1f2cbb18b | ||
|
eb65a625a2 | ||
|
516fe51505 | ||
|
5d5251f7da | ||
|
5819b314af | ||
|
630934cb89 | ||
|
d44be6e5f5 | ||
|
078ff3a04e | ||
|
865c435b4c | ||
|
1d9dd4e2de | ||
|
e95a4cf998 | ||
|
38f89a449d | ||
|
64e0b9ab64 | ||
|
e30f3726a6 | ||
|
63ba1cc610 | ||
|
384618d1bc | ||
|
b0020e0bae | ||
|
7a861ffba6 | ||
|
811da1307a | ||
|
8489426a63 | ||
|
dbe514a558 | ||
|
d5ab51f2cd | ||
|
0cea01e42f | ||
|
38d71179e9 | ||
|
cc48c433fd | ||
|
51dd9cf1f0 | ||
|
44247a8743 | ||
|
d82a29d813 | ||
|
c5324e879c | ||
|
a8f6341728 | ||
|
7472986e1c | ||
|
72dd3edde4 | ||
|
cf6740b3f6 | ||
|
14e26ac8a0 | ||
|
cee211da31 | ||
|
3818c0d296 | ||
|
ae05861b62 | ||
|
c29cf4bcd3 | ||
|
723e3da037 | ||
|
c72afa37ee | ||
|
fa5bdb2f3d | ||
|
49784a9ec8 | ||
|
d1d404fef4 | ||
|
de1dee44bd | ||
|
e1728327f6 | ||
|
3b77db9a86 | ||
|
2abad0e504 | ||
|
0411186443 | ||
|
1e96d20277 | ||
|
de4de4fc96 | ||
|
4299cfa385 | ||
|
184994586e | ||
|
692861f292 | ||
|
39408ea589 | ||
|
1602e0a7a2 | ||
|
f074f76620 | ||
|
87e6c7279d | ||
|
1f1dc806fe | ||
|
8afb3c315b | ||
|
4aae41904d | ||
|
41a44b037f | ||
|
49a7ceee70 | ||
|
3687a6cbb8 | ||
|
627cadaa39 | ||
|
eb63058bc3 | ||
|
15f1255237 | ||
|
2dfa02ba24 | ||
|
9d6a201911 | ||
|
ad01921281 | ||
|
d27d2f7ae3 | ||
|
26c17eeb91 | ||
|
fdbef84866 | ||
|
3a383608dd | ||
|
66fcf484a4 | ||
|
52c07d61f9 | ||
|
fd752420ec | ||
|
7a74ab32a8 | ||
|
3ea41bda4b | ||
|
992b42ceee | ||
|
002c8becf4 | ||
|
6f1bd51f1e | ||
|
4719d371b7 | ||
|
ba9a313911 | ||
|
4a9af33734 | ||
|
e320e266b1 | ||
|
95df7b2499 | ||
|
665f2f7ee9 | ||
|
e99e525a53 | ||
|
39ad0d62cc | ||
|
db56cc3f86 | ||
|
108dc8aa0b | ||
|
b6c97d8318 | ||
|
fd2ab0b7bb | ||
|
8c91abfa19 | ||
|
4c009309eb | ||
|
ed1865da0a | ||
|
c726a09482 | ||
|
a70de993cf | ||
|
c53a3cbb8e | ||
|
69e43dc87f | ||
|
5fa202f7d3 | ||
|
c070fc00d6 | ||
|
bd4f34b035 | ||
|
6e87e423eb | ||
|
37861d60e4 | ||
|
bd5ffa4756 | ||
|
c958de2870 | ||
|
86805c2146 | ||
|
c97d9d5b85 | ||
|
76ed820e03 | ||
|
091ba2ea58 | ||
|
3f53760062 | ||
|
83794843b5 | ||
|
4a12bdebd6 | ||
|
8a4139e1b8 | ||
|
15d683d86d | ||
|
6eda3b5482 | ||
|
6a82e95988 | ||
|
28f93df807 | ||
|
3f9b728e57 | ||
|
9a8a8b7dad | ||
|
75d6c72c5d | ||
|
8882955891 | ||
|
22b283b210 | ||
|
2bb3100395 | ||
|
5dbb6b69de | ||
|
791268a61c | ||
|
970c5ff8b6 | ||
|
4728863d5b | ||
|
a3d872c73d | ||
|
9b3000e329 | ||
|
bd851bab8f | ||
|
b4754b5edb | ||
|
99e4ac0399 | ||
|
6733b66a9c | ||
|
daf4c4831f | ||
|
d2d2f4789d | ||
|
cce3f84896 | ||
|
3018b229b1 | ||
|
fc62075b76 | ||
|
a5384fa12e | ||
|
7973f44304 | ||
|
8d9b434b5a | ||
|
5b90f68407 | ||
|
2edc474cef | ||
|
472d8ab1b3 | ||
|
4af83567b0 | ||
|
66bdb86f04 | ||
|
9ef6162f3c | ||
|
629a96d9c3 | ||
|
122e11a2e8 | ||
|
a974ab2c69 | ||
|
f8f6d51fd2 | ||
|
8d828f6c72 | ||
|
d54e20c545 | ||
|
44310bd898 | ||
|
a9f7a7b92e | ||
|
d65cccc32a | ||
|
131846fb40 | ||
|
c62359bd79 | ||
|
1e83f7c88a | ||
|
4a4b2e3b59 | ||
|
c88b139452 | ||
|
6011359cb3 | ||
|
23a5477d6e | ||
|
700ee7d27d | ||
|
2d725c2cd6 | ||
|
5c9addb8c4 | ||
|
c0290ef09a | ||
|
6c1e3e2ecc | ||
|
77d9e49290 | ||
|
0d62e6f6e0 | ||
|
f0f9e187c9 | ||
|
89037b5158 | ||
|
342e71d577 | ||
|
e196d85e43 | ||
|
7528b89b36 | ||
|
e07a644672 | ||
|
fbb778c469 | ||
|
fdc403302d | ||
|
3f712fe2fc | ||
|
3631bd877c | ||
|
0ef4c3e254 | ||
|
5d960089c9 | ||
|
31cb04f155 | ||
|
7289f70ec9 | ||
|
4b058899a2 | ||
|
79fdc68950 | ||
|
6a18254c9d | ||
|
2dfaeac27d | ||
|
aab226da28 | ||
|
180aaaabbf | ||
|
bf9406249a | ||
|
56828dbaf7 | ||
|
219f67e41a | ||
|
62df3e6ea8 | ||
|
f1fced7ec8 | ||
|
75a7ebf5c7 | ||
|
53df70235f | ||
|
8ed8ace59d | ||
|
c08bded0f3 | ||
|
90d40c6d7a | ||
|
7733416d2b | ||
|
5f11bb25b0 | ||
|
8de0428bdc | ||
|
f907245d39 | ||
|
fbd0c88ae6 | ||
|
373e4fe28d | ||
|
fdf1176fa0 | ||
|
062bd1f9a4 | ||
|
6e5043f289 | ||
|
83b34749c5 | ||
|
403c86e51c | ||
|
89759cbdec | ||
|
89243c2929 | ||
|
9d8aa74a54 | ||
|
ad4065a370 | ||
|
e230427138 | ||
|
4a462cd714 | ||
|
29d82210b4 | ||
|
adbdafb535 | ||
|
8a6343ff0d | ||
|
a1dcd5790a | ||
|
a2485a3b5e | ||
|
bb632de830 | ||
|
78d7ae8d88 | ||
|
904cbebce5 | ||
|
09fc12a929 | ||
|
2902784cf3 | ||
|
a9b78ab736 | ||
|
3d5e378e90 | ||
|
d4c2577a16 | ||
|
f681fe89b7 | ||
|
ca062647be | ||
|
3423c1d92f | ||
|
e0b75fba8c | ||
|
7dd969f2c6 | ||
|
a9c68c76c3 | ||
|
e29166e4e8 | ||
|
9217312cc4 | ||
|
fbf75dd075 | ||
|
bf1e9952e1 | ||
|
5ed7f6ac0a | ||
|
b6d2f7e302 | ||
|
bb40822d34 | ||
|
835fe8886c | ||
|
55ee48696a | ||
|
fedd6f187f | ||
|
a6cad674d0 | ||
|
c1e46b35cd | ||
|
a65d5add66 | ||
|
ba6f2fe2a2 | ||
|
ebab3919ef | ||
|
e6db6a04b5 | ||
|
fb75f8d8fc | ||
|
9660e90ad2 | ||
|
e0ed4351d0 | ||
|
619233e14b | ||
|
7c9baca424 | ||
|
c9b53b1b32 | ||
|
54cc84adf2 | ||
|
37d672412d | ||
|
1b1efca7e2 | ||
|
c9bd5b5b90 | ||
|
19295a5483 | ||
|
d06ddcd28b | ||
|
335d444213 | ||
|
0cbc38746a | ||
|
348cd98287 | ||
|
eb22beb537 | ||
|
019a9de626 | ||
|
c5c6315525 | ||
|
7fc4ce6eae | ||
|
061272f595 | ||
|
fab9a60f71 | ||
|
3e2211dc47 | ||
|
f798f74234 | ||
|
74e2376bf9 | ||
|
2f1773a819 | ||
|
9ab06ee09e | ||
|
94e47fb2c6 | ||
|
13bb060366 | ||
|
fdf49777b9 | ||
|
2a180f8038 | ||
|
799a0846c2 | ||
|
60b62d4f34 | ||
|
31bee2ebff | ||
|
5e0e128eb3 | ||
|
d9e5ff1878 | ||
|
9f52686526 | ||
|
801e6f1136 | ||
|
b97d1b74e2 | ||
|
c0e63cefbb | ||
|
cad476e5b1 | ||
|
fe43278196 | ||
|
c3b8410fcc | ||
|
58e82be3c4 | ||
|
cf63a9d593 | ||
|
5348236e65 | ||
|
c4ece9a1eb | ||
|
92cb687630 | ||
|
362bb42cf8 | ||
|
4b230f13d7 | ||
|
e1c25a988f | ||
|
2902422eeb | ||
|
ca0932532a | ||
|
ea105cd83b | ||
|
c098938a4b | ||
|
235f475e60 | ||
|
023a2797b8 | ||
|
050055e8f0 | ||
|
9a1a15d134 | ||
|
9b56a57890 | ||
|
ab48fc0f55 | ||
|
6878547f27 | ||
|
57dc49803e | ||
|
0762cdd324 | ||
|
cf3dd06818 | ||
|
0dfd0d494a | ||
|
e41a6aacb3 | ||
|
50c514e336 | ||
|
021728965c | ||
|
fae2b40020 | ||
|
b78f1194c9 | ||
|
3083c1dd7a | ||
|
6f0ecadabd | ||
|
ebb60eebee | ||
|
a3dd05510a | ||
|
ba83ecd7d3 | ||
|
b23f858ee3 | ||
|
fb0d4e7fc1 | ||
|
a0673a77b3 | ||
|
6d4fccf922 | ||
|
c30f036391 | ||
|
72d66edc6c | ||
|
8582569149 | ||
|
7cc935f2f1 | ||
|
461ade4994 | ||
|
09adafacd8 | ||
|
0ea2ba5f14 | ||
|
b5fb1221c1 | ||
|
92a2b12fe1 | ||
|
a9c626e67e | ||
|
9e1bf929c2 | ||
|
dece10b9d6 | ||
|
ebce6517f5 | ||
|
ccb0aba6b9 | ||
|
0f1e92a450 | ||
|
b1ffd29ee6 | ||
|
e2b72d82de | ||
|
756c22a866 | ||
|
1f0bbcd8dd | ||
|
afbec90dc2 | ||
|
96df77742c | ||
|
956b421ef8 | ||
|
e427ed4423 | ||
|
6c02a74a31 | ||
|
b16dc1bf5a | ||
|
3268e0d9c1 | ||
|
79ed9ec34e | ||
|
2579bbe542 | ||
|
1d927c8c45 | ||
|
37cb538e5a | ||
|
025f196aec | ||
|
928da786e5 | ||
|
10f4a1a5c5 | ||
|
ca90a4b48b | ||
|
c5d1894531 | ||
|
90244733b4 | ||
|
4787c3de81 | ||
|
8680d3dc4e | ||
|
be5db2df38 | ||
|
63eaecf469 | ||
|
b7ae2149e9 | ||
|
e807543023 | ||
|
a1684a2e0b | ||
|
e31ba93a23 | ||
|
653c9b20d5 | ||
|
e3abbf667a | ||
|
7924e052ca | ||
|
264b95cd21 | ||
|
f8b3d70c13 | ||
|
b1cef77bcf | ||
|
3b08cc6002 | ||
|
1593341ed7 | ||
|
35daac42a5 | ||
|
5b8255f671 | ||
|
abf77904a0 | ||
|
cceb1ff803 | ||
|
c81563434b | ||
|
185b23a5c4 | ||
|
6377070275 | ||
|
77740c39cc | ||
|
2acce3766c | ||
|
86eef09b2f | ||
|
09011bb590 | ||
|
03c5c6a639 | ||
|
52dc545d2e | ||
|
4ef4e3c298 | ||
|
b120e11c3d | ||
|
d09e279c79 | ||
|
1eda5611dd | ||
|
9689fe6199 | ||
|
34dd10feda | ||
|
c344f2ffe0 | ||
|
c23b875c8b | ||
|
d0155c3917 | ||
|
a2e7888156 | ||
|
a724a38c42 | ||
|
72831c6d22 | ||
|
1e8967b1f9 | ||
|
bf815d0093 | ||
|
c3aefda148 | ||
|
1c784e80ec | ||
|
2793990a94 | ||
|
1d3a7ff50a | ||
|
b3d5558a40 | ||
|
5cf45e711e | ||
|
3c94523f11 | ||
|
b3563716bd | ||
|
1aeaa97475 | ||
|
4dcfe6d6c8 | ||
|
3be848a82a | ||
|
513dabb395 | ||
|
6a269e5741 | ||
|
d9e561a4cf | ||
|
6e4a63bdfe | ||
|
8aad659697 | ||
|
c306d08d7e | ||
|
0b9f0d6a35 | ||
|
e6f0e459dd | ||
|
5e455132c1 | ||
|
107257210d | ||
|
a654ca2683 | ||
|
431421c6ff | ||
|
027fc1139c | ||
|
7e9cd85e8d | ||
|
e8ad5be7fb | ||
|
86c4e40277 | ||
|
b0c04f8577 | ||
|
8824e41b48 | ||
|
270a50c8c5 | ||
|
8df490955c | ||
|
de63f9a9d5 | ||
|
170c14560c | ||
|
d3badb58b2 | ||
|
db735bf685 | ||
|
7959b894b4 | ||
|
71a6dde3f8 | ||
|
8954fe454b | ||
|
56adf15b23 | ||
|
ab18a0e335 | ||
|
997ca1fa4d | ||
|
b06f6bdbb5 | ||
|
798228cb72 | ||
|
a022f1e792 | ||
|
a6e1840e4f | ||
|
86364dec74 | ||
|
61318c0158 | ||
|
14004d0749 | ||
|
ec9cddc21a | ||
|
cedb32d569 | ||
|
9a508d1f19 | ||
|
f6cb3516b3 | ||
|
fa7a690e26 | ||
|
5f018c9516 | ||
|
664848112e | ||
|
a703e41949 | ||
|
3938d15098 | ||
|
76bb61de6c | ||
|
0faade4b8a | ||
|
4e39200eff | ||
|
a4676f7b6e | ||
|
3b384a306f | ||
|
0fcf7acdba | ||
|
d04f496c7a | ||
|
a263209bb6 | ||
|
d824af51a9 | ||
|
e655394a7a | ||
|
07c3456330 | ||
|
80b8d3b318 | ||
|
ed84ac0a9b | ||
|
fa7d4b3ec7 | ||
|
f34245e46e | ||
|
f8bc5ae591 | ||
|
b3d5150acd | ||
|
2faf5857c8 | ||
|
f4a6a73184 | ||
|
94865441a1 | ||
|
32fbd909b2 | ||
|
568e75e147 |
37
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
37
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: AlexanderAmelkin
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
*Please **DO NOT** report ANYTHING about 1.8.18, it is outdated. Please first check your alleged bug with the latest code from the top of the master branch here.*
|
||||||
|
|
||||||
|
**IPMITOOL Version**
|
||||||
|
|
||||||
|
Make sure you're reporting a bug in the latest code taken from `master` branch here, NOT a bug
|
||||||
|
that you've found in some version that you've got from your OS vendor or any source other than this repository.
|
||||||
|
|
||||||
|
```none
|
||||||
|
$ ipmitool -V
|
||||||
|
<output here>
|
||||||
|
```
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Using hardware/BMC '...'
|
||||||
|
2. Run `ipmitool ...`
|
||||||
|
3. Observe the abnormal reply:
|
||||||
|
```none
|
||||||
|
abnormal output example
|
||||||
|
```
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
120
.github/workflows/ci.yml
vendored
Normal file
120
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
# vi: set et ts=2 sw=2 :
|
||||||
|
name: build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- name: install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt install \
|
||||||
|
automake \
|
||||||
|
gcc \
|
||||||
|
git \
|
||||||
|
libssl-dev \
|
||||||
|
libtool \
|
||||||
|
make \
|
||||||
|
wget
|
||||||
|
- name: install extra libraries
|
||||||
|
# This build job tries to verify as much of ipmitool code
|
||||||
|
# as possible, hence these libraries. They aren't usually
|
||||||
|
# needed for normal user builds:
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install \
|
||||||
|
libsystemd-dev \
|
||||||
|
libreadline-dev \
|
||||||
|
libfreeipmi-dev \
|
||||||
|
libusb-dev
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: bootstrap
|
||||||
|
run: ./bootstrap
|
||||||
|
- name: configure
|
||||||
|
run: |
|
||||||
|
# For Linux, build as many extra interfaces as possible
|
||||||
|
# to verify the code
|
||||||
|
./configure --enable-intf-dummy \
|
||||||
|
--enable-intf-dbus \
|
||||||
|
--enable-intf-usb \
|
||||||
|
--enable-intf-free
|
||||||
|
- name: make
|
||||||
|
run: make
|
||||||
|
- name: make check
|
||||||
|
run: make check
|
||||||
|
- name: make distcheck
|
||||||
|
run: make distcheck
|
||||||
|
|
||||||
|
macos:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ macos-10.15, macos-11, macos-12 ]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: install dependencies
|
||||||
|
run: brew install automake openssl libtool freeipmi wget
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: bootstrap
|
||||||
|
run: ./bootstrap
|
||||||
|
- name: configure
|
||||||
|
run: |
|
||||||
|
./configure --enable-intf-dummy \
|
||||||
|
LDFLAGS=-L/usr/local/opt/openssl@1.1/lib \
|
||||||
|
CFLAGS=-I/usr/local/opt/openssl@1.1/include
|
||||||
|
- name: make
|
||||||
|
run: make
|
||||||
|
- name: make check
|
||||||
|
run: make check
|
||||||
|
- name: make distcheck
|
||||||
|
run: make distcheck
|
||||||
|
|
||||||
|
windows:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ windows-2019, windows-2022 ]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: install dependencies
|
||||||
|
run: |-
|
||||||
|
choco install cygwin -y
|
||||||
|
choco install cyg-get -y
|
||||||
|
# Line continuation in PowerShell is backtick. Weird as Windows.
|
||||||
|
cyg-get gcc-g++ `
|
||||||
|
make `
|
||||||
|
automake `
|
||||||
|
autoconf `
|
||||||
|
m4 `
|
||||||
|
libtool `
|
||||||
|
libncurses-devel `
|
||||||
|
libreadline-devel `
|
||||||
|
libssl-devel `
|
||||||
|
dos2unix `
|
||||||
|
wget
|
||||||
|
echo "C:/tools/cygwin/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
echo "C:/tools/cygwin/usr/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: convert line ends
|
||||||
|
# checkout action on Windows apparently converts line ends
|
||||||
|
# so we have to convert them back because cygwin bash can't
|
||||||
|
# can't handle Windows line ends
|
||||||
|
run: dos2unix bootstrap configure.ac csv-revision
|
||||||
|
- name: bootstrap
|
||||||
|
run: bash -c "./bootstrap"
|
||||||
|
- name: configure
|
||||||
|
run: bash -c "./configure"
|
||||||
|
- name: make
|
||||||
|
run: make
|
||||||
|
- name: make check
|
||||||
|
run: make check
|
||||||
|
- name: make distcheck
|
||||||
|
run: make distcheck
|
39
.gitignore
vendored
Normal file
39
.gitignore
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
.deps
|
||||||
|
.dirstamp
|
||||||
|
.libs
|
||||||
|
.*.swp
|
||||||
|
*.log
|
||||||
|
*.rej
|
||||||
|
*.orig
|
||||||
|
*.o
|
||||||
|
*.lo
|
||||||
|
*.la
|
||||||
|
*.*~
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
autom4te.cache
|
||||||
|
compile
|
||||||
|
config.guess
|
||||||
|
config.h
|
||||||
|
config.h.in
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
depcomp
|
||||||
|
install-sh
|
||||||
|
ltmain.sh
|
||||||
|
libtool
|
||||||
|
missing
|
||||||
|
stamp-h1
|
||||||
|
control/ipmitool.spec
|
||||||
|
control/pkginfo
|
||||||
|
control/prototype
|
||||||
|
control/rpmmacros
|
||||||
|
src/ipmievd
|
||||||
|
src/ipmitool
|
||||||
|
doc/ipmievd.8
|
||||||
|
doc/ipmitool.1
|
||||||
|
cscope.out
|
||||||
|
tags
|
@ -2,3 +2,4 @@ Duncan Laurie <duncan@iceblink.org>
|
|||||||
Fredrik Öhrn <ohrn@chl.chalmers.se>
|
Fredrik Öhrn <ohrn@chl.chalmers.se>
|
||||||
Jon Cassorla <jon.cassorla@newisys.com>
|
Jon Cassorla <jon.cassorla@newisys.com>
|
||||||
Jeremy Ellington <jeremy@jeremye.net>
|
Jeremy Ellington <jeremy@jeremye.net>
|
||||||
|
Petter Reinholdtsen <pere@hungry.com>
|
431
INSTALL
Normal file
431
INSTALL
Normal file
@ -0,0 +1,431 @@
|
|||||||
|
Installation Instructions
|
||||||
|
*************************
|
||||||
|
|
||||||
|
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
|
||||||
|
Inc.
|
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved. This file is offered as-is,
|
||||||
|
without warranty of any kind.
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
=============
|
||||||
|
|
||||||
|
This project requires at least gcc 4.8.1 as it uses some GNU
|
||||||
|
extensions and some C11 features. For `lanplus` interface the OpenSSL
|
||||||
|
library and development headers are required. As of July 2020, the
|
||||||
|
project is tested automatically to build cleanly for the following
|
||||||
|
64-bit operating systems using GitHub Actions workflow:
|
||||||
|
|
||||||
|
- Ubuntu 18.04 Bionic Beaver
|
||||||
|
- Ubuntu 20.04 Focal Fossa
|
||||||
|
- Ubuntu 22.04 Jammy Jellyfish
|
||||||
|
- MacOS X 10.15 Catalina
|
||||||
|
- MacOS 11 Big Sur
|
||||||
|
- MacOS 12 Monterey
|
||||||
|
- Microsoft Windows Server 2019
|
||||||
|
- Microsoft Windows Server 2022
|
||||||
|
|
||||||
|
It is also known to build successfully on Ubuntu 14.04 and Fedora 31,
|
||||||
|
but that is not automatically verified.
|
||||||
|
|
||||||
|
For Ubuntu 14.04+ it is recommended to do the following before building:
|
||||||
|
|
||||||
|
$ sudo apt install automake gcc git libreadline-dev libssl-dev \
|
||||||
|
libtool make wget
|
||||||
|
|
||||||
|
For Ubuntu 20.04+ you will also need this:
|
||||||
|
|
||||||
|
$ sudo apt install musl-dev
|
||||||
|
|
||||||
|
For Fedora 31 it is recommended to do the following before building:
|
||||||
|
|
||||||
|
$ sudo dnf install automake gcc git libtool make openssl-devel \
|
||||||
|
readline-devel wget
|
||||||
|
|
||||||
|
For MacOS with Xcode and homebrew installed, it is recommended to do the
|
||||||
|
following before building:
|
||||||
|
|
||||||
|
$ brew install automake openssl libtool freeipmi wget
|
||||||
|
$ export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
|
||||||
|
$ export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
|
||||||
|
|
||||||
|
To prepare for building in Windows it is recommended to use Chocolatey
|
||||||
|
and do the following using PowerShell:
|
||||||
|
|
||||||
|
PS C:\ipmitool> choco install cygwin -y
|
||||||
|
PS C:\ipmitool> choco install cyg-get -y
|
||||||
|
PS C:\ipmitool> cyg-get gcc-g++ make automake autoconf `
|
||||||
|
# m4 libtool libncurses-devel libreadline-devel libssl-devel `
|
||||||
|
# dos2unix wget
|
||||||
|
PS C:\ipmitool> $env:path="C:\tools\cygwin\usr\bin;$env:path"
|
||||||
|
PS C:\ipmitool> $env:path="C:\tools\cygwin\bin;$env:path"
|
||||||
|
PS C:\ipmitool> dos2unix bootstrap configure.ac csv-revision
|
||||||
|
|
||||||
|
Basic Installation
|
||||||
|
==================
|
||||||
|
|
||||||
|
Briefly, the followong shell command should configure, build, and
|
||||||
|
install this package:
|
||||||
|
|
||||||
|
./bootstrap && ./configure && make && sudo make install
|
||||||
|
|
||||||
|
For Windows the above command must be run inside a cygwin bash
|
||||||
|
shell.
|
||||||
|
|
||||||
|
The following more-detailed instructions are generic; see the
|
||||||
|
`README' file for instructions specific to this package. Some
|
||||||
|
packages provide this `INSTALL' file but do not implement all of the
|
||||||
|
features documented below. The lack of an optional feature in a given
|
||||||
|
package is not necessarily a bug. More recommendations for GNU
|
||||||
|
packages can be found in *note Makefile Conventions:
|
||||||
|
(standards)Makefile Conventions.
|
||||||
|
|
||||||
|
The `configure' shell script attempts to guess correct values for
|
||||||
|
various system-dependent variables used during compilation. It uses
|
||||||
|
those values to create a `Makefile' in each directory of the package.
|
||||||
|
It may also create one or more `.h' files containing system-dependent
|
||||||
|
definitions. Finally, it creates a shell script `config.status' that
|
||||||
|
you can run in the future to recreate the current configuration, and a
|
||||||
|
file `config.log' containing compiler output (useful mainly for
|
||||||
|
debugging `configure').
|
||||||
|
|
||||||
|
It can also use an optional file (typically called `config.cache'
|
||||||
|
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||||
|
the results of its tests to speed up reconfiguring. Caching is
|
||||||
|
disabled by default to prevent problems with accidental use of stale
|
||||||
|
cache files.
|
||||||
|
|
||||||
|
If you need to do unusual things to compile the package, please try
|
||||||
|
to figure out how `configure' could check whether to do them, and mail
|
||||||
|
diffs or instructions to the address given in the `README' so they can
|
||||||
|
be considered for the next release. If you are using the cache, and at
|
||||||
|
some point `config.cache' contains results you don't want to keep, you
|
||||||
|
may remove or edit it.
|
||||||
|
|
||||||
|
The file `configure.ac' (or `configure.in') is used to create
|
||||||
|
`configure' by a program called `autoconf'. You need `configure.ac' if
|
||||||
|
you want to change it or regenerate `configure' using a newer version
|
||||||
|
of `autoconf'.
|
||||||
|
|
||||||
|
The simplest way to compile this package is:
|
||||||
|
|
||||||
|
1. `cd' to the directory containing the package's source code and type
|
||||||
|
`./configure' to configure the package for your system.
|
||||||
|
|
||||||
|
Running `configure' might take a while. While running, it prints
|
||||||
|
some messages telling which features it is checking for.
|
||||||
|
|
||||||
|
2. Type `make' to compile the package.
|
||||||
|
|
||||||
|
3. Optionally, type `make check' to run any self-tests that come with
|
||||||
|
the package, generally using the just-built uninstalled binaries.
|
||||||
|
|
||||||
|
4. Type `make install' to install the programs and any data files and
|
||||||
|
documentation. When installing into a prefix owned by root, it is
|
||||||
|
recommended that the package be configured and built as a regular
|
||||||
|
user, and only the `make install' phase executed with root
|
||||||
|
privileges.
|
||||||
|
|
||||||
|
5. Optionally, type `make installcheck' to repeat any self-tests, but
|
||||||
|
this time using the binaries in their final installed location.
|
||||||
|
This target does not install anything. Running this target as a
|
||||||
|
regular user, particularly if the prior `make install' required
|
||||||
|
root privileges, verifies that the installation completed
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
6. You can remove the program binaries and object files from the
|
||||||
|
source code directory by typing `make clean'. To also remove the
|
||||||
|
files that `configure' created (so you can compile the package for
|
||||||
|
a different kind of computer), type `make distclean'. There is
|
||||||
|
also a `make maintainer-clean' target, but that is intended mainly
|
||||||
|
for the package's developers. If you use it, you may have to get
|
||||||
|
all sorts of other programs in order to regenerate files that came
|
||||||
|
with the distribution.
|
||||||
|
|
||||||
|
7. Often, you can also type `make uninstall' to remove the installed
|
||||||
|
files again. In practice, not all packages have tested that
|
||||||
|
uninstallation works correctly, even though it is required by the
|
||||||
|
GNU Coding Standards.
|
||||||
|
|
||||||
|
8. Some packages, particularly those that use Automake, provide `make
|
||||||
|
distcheck', which can by used by developers to test that all other
|
||||||
|
targets like `make install' and `make uninstall' work correctly.
|
||||||
|
This target is generally not run by end users.
|
||||||
|
|
||||||
|
Compilers and Options
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Some systems require unusual options for compilation or linking that
|
||||||
|
the `configure' script does not know about. Run `./configure --help'
|
||||||
|
for details on some of the pertinent environment variables.
|
||||||
|
|
||||||
|
You can give `configure' initial values for configuration parameters
|
||||||
|
by setting variables in the command line or in the environment. Here
|
||||||
|
is an example:
|
||||||
|
|
||||||
|
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||||
|
|
||||||
|
*Note Defining Variables::, for more details.
|
||||||
|
|
||||||
|
Compiling For Multiple Architectures
|
||||||
|
====================================
|
||||||
|
|
||||||
|
You can compile the package for more than one kind of computer at the
|
||||||
|
same time, by placing the object files for each architecture in their
|
||||||
|
own directory. To do this, you can use GNU `make'. `cd' to the
|
||||||
|
directory where you want the object files and executables to go and run
|
||||||
|
the `configure' script. `configure' automatically checks for the
|
||||||
|
source code in the directory that `configure' is in and in `..'. This
|
||||||
|
is known as a "VPATH" build.
|
||||||
|
|
||||||
|
With a non-GNU `make', it is safer to compile the package for one
|
||||||
|
architecture at a time in the source code directory. After you have
|
||||||
|
installed the package for one architecture, use `make distclean' before
|
||||||
|
reconfiguring for another architecture.
|
||||||
|
|
||||||
|
On MacOS and later systems, you can create libraries and
|
||||||
|
executables that work on multiple system types--known as "fat" or
|
||||||
|
"universal" binaries--by specifying multiple `-arch' options to the
|
||||||
|
compiler but only a single `-arch' option to the preprocessor. Like
|
||||||
|
this:
|
||||||
|
|
||||||
|
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||||
|
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||||
|
CPP="gcc -E" CXXCPP="g++ -E"
|
||||||
|
|
||||||
|
This is not guaranteed to produce working output in all cases, you
|
||||||
|
may have to build one architecture at a time and combine the results
|
||||||
|
using the `lipo' tool if you have problems.
|
||||||
|
|
||||||
|
Installation Names
|
||||||
|
==================
|
||||||
|
|
||||||
|
By default, `make install' installs the package's commands under
|
||||||
|
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||||
|
can specify an installation prefix other than `/usr/local' by giving
|
||||||
|
`configure' the option `--prefix=PREFIX', where PREFIX must be an
|
||||||
|
absolute file name.
|
||||||
|
|
||||||
|
You can specify separate installation prefixes for
|
||||||
|
architecture-specific files and architecture-independent files. If you
|
||||||
|
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||||
|
PREFIX as the prefix for installing programs and libraries.
|
||||||
|
Documentation and other data files still use the regular prefix.
|
||||||
|
|
||||||
|
In addition, if you use an unusual directory layout you can give
|
||||||
|
options like `--bindir=DIR' to specify different values for particular
|
||||||
|
kinds of files. Run `configure --help' for a list of the directories
|
||||||
|
you can set and what kinds of files go in them. In general, the
|
||||||
|
default for these options is expressed in terms of `${prefix}', so that
|
||||||
|
specifying just `--prefix' will affect all of the other directory
|
||||||
|
specifications that were not explicitly provided.
|
||||||
|
|
||||||
|
The most portable way to affect installation locations is to pass the
|
||||||
|
correct locations to `configure'; however, many packages provide one or
|
||||||
|
both of the following shortcuts of passing variable assignments to the
|
||||||
|
`make install' command line to change installation locations without
|
||||||
|
having to reconfigure or recompile.
|
||||||
|
|
||||||
|
The first method involves providing an override variable for each
|
||||||
|
affected directory. For example, `make install
|
||||||
|
prefix=/alternate/directory' will choose an alternate location for all
|
||||||
|
directory configuration variables that were expressed in terms of
|
||||||
|
`${prefix}'. Any directories that were specified during `configure',
|
||||||
|
but not in terms of `${prefix}', must each be overridden at install
|
||||||
|
time for the entire installation to be relocated. The approach of
|
||||||
|
makefile variable overrides for each directory variable is required by
|
||||||
|
the GNU Coding Standards, and ideally causes no recompilation.
|
||||||
|
However, some platforms have known limitations with the semantics of
|
||||||
|
shared libraries that end up requiring recompilation when using this
|
||||||
|
method, particularly noticeable in packages that use GNU Libtool.
|
||||||
|
|
||||||
|
The second method involves providing the `DESTDIR' variable. For
|
||||||
|
example, `make install DESTDIR=/alternate/directory' will prepend
|
||||||
|
`/alternate/directory' before all installation names. The approach of
|
||||||
|
`DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||||
|
does not work on platforms that have drive letters. On the other hand,
|
||||||
|
it does better at avoiding recompilation issues, and works well even
|
||||||
|
when some directory options were not specified in terms of `${prefix}'
|
||||||
|
at `configure' time.
|
||||||
|
|
||||||
|
Optional Features
|
||||||
|
=================
|
||||||
|
|
||||||
|
If the package supports it, you can cause programs to be installed
|
||||||
|
with an extra prefix or suffix on their names by giving `configure' the
|
||||||
|
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||||
|
|
||||||
|
Some packages pay attention to `--enable-FEATURE' options to
|
||||||
|
`configure', where FEATURE indicates an optional part of the package.
|
||||||
|
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||||
|
is something like `gnu-as' or `x' (for the X Window System). The
|
||||||
|
`README' should mention any `--enable-' and `--with-' options that the
|
||||||
|
package recognizes.
|
||||||
|
|
||||||
|
For packages that use the X Window System, `configure' can usually
|
||||||
|
find the X include and library files automatically, but if it doesn't,
|
||||||
|
you can use the `configure' options `--x-includes=DIR' and
|
||||||
|
`--x-libraries=DIR' to specify their locations.
|
||||||
|
|
||||||
|
Some packages offer the ability to configure how verbose the
|
||||||
|
execution of `make' will be. For these packages, running `./configure
|
||||||
|
--enable-silent-rules' sets the default to minimal output, which can be
|
||||||
|
overridden with `make V=1'; while running `./configure
|
||||||
|
--disable-silent-rules' sets the default to verbose, which can be
|
||||||
|
overridden with `make V=0'.
|
||||||
|
|
||||||
|
Particular systems
|
||||||
|
==================
|
||||||
|
|
||||||
|
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
|
||||||
|
CC is not installed, it is recommended to use the following options in
|
||||||
|
order to use an ANSI C compiler:
|
||||||
|
|
||||||
|
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||||
|
|
||||||
|
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||||
|
|
||||||
|
HP-UX `make' updates targets which have the same time stamps as
|
||||||
|
their prerequisites, which makes it generally unusable when shipped
|
||||||
|
generated files such as `configure' are involved. Use GNU `make'
|
||||||
|
instead.
|
||||||
|
|
||||||
|
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||||
|
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
|
||||||
|
a workaround. If GNU CC is not installed, it is therefore recommended
|
||||||
|
to try
|
||||||
|
|
||||||
|
./configure CC="cc"
|
||||||
|
|
||||||
|
and if that doesn't work, try
|
||||||
|
|
||||||
|
./configure CC="cc -nodtk"
|
||||||
|
|
||||||
|
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
|
||||||
|
directory contains several dysfunctional programs; working variants of
|
||||||
|
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
|
||||||
|
in your `PATH', put it _after_ `/usr/bin'.
|
||||||
|
|
||||||
|
On Haiku, software installed for all users goes in `/boot/common',
|
||||||
|
not `/usr/local'. It is recommended to use the following options:
|
||||||
|
|
||||||
|
./configure --prefix=/boot/common
|
||||||
|
|
||||||
|
Specifying the System Type
|
||||||
|
==========================
|
||||||
|
|
||||||
|
There may be some features `configure' cannot figure out
|
||||||
|
automatically, but needs to determine by the type of machine the package
|
||||||
|
will run on. Usually, assuming the package is built to be run on the
|
||||||
|
_same_ architectures, `configure' can figure that out, but if it prints
|
||||||
|
a message saying it cannot guess the machine type, give it the
|
||||||
|
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||||
|
type, such as `sun4', or a canonical name which has the form:
|
||||||
|
|
||||||
|
CPU-COMPANY-SYSTEM
|
||||||
|
|
||||||
|
where SYSTEM can have one of these forms:
|
||||||
|
|
||||||
|
OS
|
||||||
|
KERNEL-OS
|
||||||
|
|
||||||
|
See the file `config.sub' for the possible values of each field. If
|
||||||
|
`config.sub' isn't included in this package, then this package doesn't
|
||||||
|
need to know the machine type.
|
||||||
|
|
||||||
|
If you are _building_ compiler tools for cross-compiling, you should
|
||||||
|
use the option `--target=TYPE' to select the type of system they will
|
||||||
|
produce code for.
|
||||||
|
|
||||||
|
If you want to _use_ a cross compiler, that generates code for a
|
||||||
|
platform different from the build platform, you should specify the
|
||||||
|
"host" platform (i.e., that on which the generated programs will
|
||||||
|
eventually be run) with `--host=TYPE'.
|
||||||
|
|
||||||
|
Sharing Defaults
|
||||||
|
================
|
||||||
|
|
||||||
|
If you want to set default values for `configure' scripts to share,
|
||||||
|
you can create a site shell script called `config.site' that gives
|
||||||
|
default values for variables like `CC', `cache_file', and `prefix'.
|
||||||
|
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||||
|
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||||
|
`CONFIG_SITE' environment variable to the location of the site script.
|
||||||
|
A warning: not all `configure' scripts look for a site script.
|
||||||
|
|
||||||
|
Defining Variables
|
||||||
|
==================
|
||||||
|
|
||||||
|
Variables not defined in a site shell script can be set in the
|
||||||
|
environment passed to `configure'. However, some packages may run
|
||||||
|
configure again during the build, and the customized values of these
|
||||||
|
variables may be lost. In order to avoid this problem, you should set
|
||||||
|
them in the `configure' command line, using `VAR=value'. For example:
|
||||||
|
|
||||||
|
./configure CC=/usr/local2/bin/gcc
|
||||||
|
|
||||||
|
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||||
|
overridden in the site shell script).
|
||||||
|
|
||||||
|
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
||||||
|
an Autoconf limitation. Until the limitation is lifted, you can use
|
||||||
|
this workaround:
|
||||||
|
|
||||||
|
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||||
|
|
||||||
|
`configure' Invocation
|
||||||
|
======================
|
||||||
|
|
||||||
|
`configure' recognizes the following options to control how it
|
||||||
|
operates.
|
||||||
|
|
||||||
|
`--help'
|
||||||
|
`-h'
|
||||||
|
Print a summary of all of the options to `configure', and exit.
|
||||||
|
|
||||||
|
`--help=short'
|
||||||
|
`--help=recursive'
|
||||||
|
Print a summary of the options unique to this package's
|
||||||
|
`configure', and exit. The `short' variant lists options used
|
||||||
|
only in the top level, while the `recursive' variant lists options
|
||||||
|
also present in any nested packages.
|
||||||
|
|
||||||
|
`--version'
|
||||||
|
`-V'
|
||||||
|
Print the version of Autoconf used to generate the `configure'
|
||||||
|
script, and exit.
|
||||||
|
|
||||||
|
`--cache-file=FILE'
|
||||||
|
Enable the cache: use and save the results of the tests in FILE,
|
||||||
|
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||||
|
disable caching.
|
||||||
|
|
||||||
|
`--config-cache'
|
||||||
|
`-C'
|
||||||
|
Alias for `--cache-file=config.cache'.
|
||||||
|
|
||||||
|
`--quiet'
|
||||||
|
`--silent'
|
||||||
|
`-q'
|
||||||
|
Do not print messages saying which checks are being made. To
|
||||||
|
suppress all normal output, redirect it to `/dev/null' (any error
|
||||||
|
messages will still be shown).
|
||||||
|
|
||||||
|
`--srcdir=DIR'
|
||||||
|
Look for the package's source code in directory DIR. Usually
|
||||||
|
`configure' can determine that directory automatically.
|
||||||
|
|
||||||
|
`--prefix=DIR'
|
||||||
|
Use DIR as the installation prefix. *note Installation Names::
|
||||||
|
for more details, including other options available for fine-tuning
|
||||||
|
the installation locations.
|
||||||
|
|
||||||
|
`--no-create'
|
||||||
|
`-n'
|
||||||
|
Run the configure checks, but stop before creating any output
|
||||||
|
files.
|
||||||
|
|
||||||
|
`configure' also accepts some other, not widely useful, options. Run
|
||||||
|
`configure --help' for more details.
|
@ -28,12 +28,10 @@
|
|||||||
# LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
# LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
DOCDIR = $(datadir)/doc/$(PACKAGE)
|
DOCDIR = $(docdir)
|
||||||
DOCLIST = $(top_srcdir)/README $(top_srcdir)/COPYING $(top_srcdir)/AUTHORS $(top_srcdir)/ChangeLog
|
DOCLIST = $(top_srcdir)/README $(top_srcdir)/COPYING $(top_srcdir)/AUTHORS $(top_srcdir)/ChangeLog
|
||||||
|
|
||||||
EXTRA_DIST = $(DOCLIST) \
|
EXTRA_DIST = $(DOCLIST) bootstrap
|
||||||
debian/changelog debian/control debian/copyright \
|
|
||||||
debian/dirs debian/docs debian/rules
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = dist-bzip2
|
AUTOMAKE_OPTIONS = dist-bzip2
|
||||||
|
|
||||||
@ -43,15 +41,49 @@ MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure configure-stamp \
|
|||||||
$(distdir).tar.gz $(distdir).tar.bz2
|
$(distdir).tar.gz $(distdir).tar.bz2
|
||||||
|
|
||||||
SUBDIRS = lib src include doc contrib control
|
SUBDIRS = lib src include doc contrib control
|
||||||
|
IANA_PEN = http://www.iana.org/assignments/enterprise-numbers.txt
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
cp control/ipmitool.spec $(distdir)
|
cp control/ipmitool.spec $(distdir)
|
||||||
|
|
||||||
install-data-local:
|
.PHONY: install-pen-database uninstall-pen-database
|
||||||
|
.INTERMEDIATE: %.o %.la enterprise-numbers
|
||||||
|
|
||||||
|
if DOWNLOAD
|
||||||
|
|
||||||
|
enterprise-numbers:
|
||||||
|
@echo Downloading IANA PEN database...
|
||||||
|
@$(DOWNLOAD) "$(IANA_PEN)" > tmpfile.$$PPID || {\
|
||||||
|
echo "FAILED to download the IANA PEN database"; \
|
||||||
|
rm tmpfile.$$PPID; \
|
||||||
|
false; \
|
||||||
|
}
|
||||||
|
@mv tmpfile.$$PPID $@
|
||||||
|
|
||||||
|
install-pen-database: enterprise-numbers
|
||||||
|
mkdir -m 755 -p $(DESTDIR)$(IANADIR)
|
||||||
|
$(INSTALL_DATA) $< $(DESTDIR)$(IANADIR)/
|
||||||
|
|
||||||
|
uninstall-pen-database:
|
||||||
|
-rm -rf $(DESTDIR)$(IANADIR)/enterprise-numbers
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
install-pen-database:
|
||||||
|
@echo "*** NOT installing the IANA PEN database."
|
||||||
|
@echo "*** Don't know how to download it."
|
||||||
|
|
||||||
|
uninstall-pen-database:
|
||||||
|
@echo "*** NOT uninstalling the IANA PEN database."
|
||||||
|
@echo "*** It was installed manually (if ever)."
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
install-data-local: install-pen-database
|
||||||
mkdir -p $(DESTDIR)$(DOCDIR)
|
mkdir -p $(DESTDIR)$(DOCDIR)
|
||||||
$(INSTALL_DATA) $(DOCLIST) $(DESTDIR)$(DOCDIR)
|
$(INSTALL_DATA) $(DOCLIST) $(DESTDIR)$(DOCDIR)
|
||||||
|
|
||||||
uninstall-local:
|
uninstall-local: uninstall-pen-database
|
||||||
-rm -rf $(DESTDIR)$(DOCDIR)
|
-rm -rf $(DESTDIR)$(DOCDIR)
|
||||||
|
|
||||||
.PHONY: pkg
|
.PHONY: pkg
|
||||||
@ -69,12 +101,8 @@ SRCDIR = ${shell cd $(top_srcdir) ; pwd | sed -e 's,^[^:\\/]:[\\/],/,'}
|
|||||||
RPMDIR = $(BUILDDIR)/rpmbuild
|
RPMDIR = $(BUILDDIR)/rpmbuild
|
||||||
|
|
||||||
.PHONY: rpm
|
.PHONY: rpm
|
||||||
rpm: control/ipmitool.spec dist
|
rpm: dist
|
||||||
mkdir -p $(RPMDIR)/{BUILD,RPMS,SRPMS,SOURCES,SPECS,tmp}
|
@RPMBUILD@ -ta --define "_topdir $(RPMDIR)" $(distdir).tar.gz
|
||||||
cp control/ipmitool.spec $(RPMDIR)/SPECS
|
|
||||||
BUILDDIR=$(RPMDIR) CONFIGDIR=$(BUILDDIR)/control \
|
|
||||||
@RPMBUILD@ -ba --rcfile $(SRCDIR)/control/rpmrc \
|
|
||||||
$(RPMDIR)/SPECS/ipmitool.spec
|
|
||||||
|
|
||||||
.PHONY: clean-rpm
|
.PHONY: clean-rpm
|
||||||
clean-rpm:
|
clean-rpm:
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
ipmitool
|
ipmitool
|
||||||
Duncan Laurie
|
Duncan Laurie
|
||||||
duncan@iceblink.org
|
ipmitool-devel@lists.sourceforge.net
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
@ -24,7 +24,7 @@ Background
|
|||||||
==========
|
==========
|
||||||
I originally wrote ipmitool while between projects and employeed at Sun
|
I originally wrote ipmitool while between projects and employeed at Sun
|
||||||
Microsystems. Sun had just embarked on a new line of general-purpose x86
|
Microsystems. Sun had just embarked on a new line of general-purpose x86
|
||||||
servers that inclued an OEM Intel board with an IPMIv1.5 BMC on board.
|
servers that included an OEM Intel board with an IPMIv1.5 BMC on board.
|
||||||
It started with an idea that remote chassis power control would be a handy
|
It started with an idea that remote chassis power control would be a handy
|
||||||
feature for my systems in the lab and from there it grew into a multi-
|
feature for my systems in the lab and from there it grew into a multi-
|
||||||
purpose tool that lots of people found useful. I decided to release it
|
purpose tool that lots of people found useful. I decided to release it
|
||||||
@ -42,8 +42,8 @@ Requirements
|
|||||||
============
|
============
|
||||||
Obviously the largest requirement is hardware with a service processor
|
Obviously the largest requirement is hardware with a service processor
|
||||||
that supports the IPMI specification. Many x86-based servers are now
|
that supports the IPMI specification. Many x86-based servers are now
|
||||||
comming with IPMI support, check with your preferred hardware vendor
|
coming with IPMI support, check with your preferred hardware vendor
|
||||||
about available prodcuts.
|
about available products.
|
||||||
|
|
||||||
Once you are certain you have the required hardware, you then need to
|
Once you are certain you have the required hardware, you then need to
|
||||||
decide how you want to access the BMC. The most common case involve
|
decide how you want to access the BMC. The most common case involve
|
||||||
@ -126,11 +126,114 @@ hardware will come with a utility (often a DOS bootable CD) for configuring
|
|||||||
enabling the LAN interface as well.
|
enabling the LAN interface as well.
|
||||||
|
|
||||||
In order to support the IPMIv2.0 interface you must have an OpenSSL library
|
In order to support the IPMIv2.0 interface you must have an OpenSSL library
|
||||||
with the required encrytion functions. Recent distributions should have
|
with the required encryption functions. Recent distributions should have
|
||||||
no problems. The IPMIv1.5 interface will attempt to use OpenSSL for MD5
|
no problems. The IPMIv1.5 interface will attempt to use OpenSSL for MD5
|
||||||
hash function at compile time but if that is not found it will use an
|
hash function at compile time but if that is not found it will use an
|
||||||
internal library.
|
internal library.
|
||||||
|
|
||||||
|
IPMB Dual Bridging in IPMITOOL
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
IPMI offers a standard messaging interface.
|
||||||
|
|
||||||
|
The following concepts are related to this messaging interface:
|
||||||
|
|
||||||
|
Channel type : Communication channel type (SMS/KCS, IPMB, LAN)
|
||||||
|
Channel number : Channel descriptor
|
||||||
|
Requester : Address of the requester
|
||||||
|
Responder : Address of the responder
|
||||||
|
NetFN : The logical function for the request/response.
|
||||||
|
Command : The command number
|
||||||
|
Sequence : An ID identifiying the request/response pair
|
||||||
|
Message tracking : The ability to match request/response pair.
|
||||||
|
|
||||||
|
When a communication is issued through any of the channels, an application
|
||||||
|
formats a request and expect a response.
|
||||||
|
|
||||||
|
Direct Command
|
||||||
|
--------------
|
||||||
|
The simplest form of communication is a "direct command" using SMS/KCS
|
||||||
|
|
||||||
|
Example:
|
||||||
|
ipmitool raw 6 4
|
||||||
|
55 00
|
||||||
|
|
||||||
|
This send raw command 4 (selftest) from netfn 6(application) to KCS, the driver
|
||||||
|
takes care of 'message tracking' and provides the answer.
|
||||||
|
|
||||||
|
Hopefully, the application also includes a "human readable" instance of the API:
|
||||||
|
ipmitool mc selftest
|
||||||
|
Selftest: passed
|
||||||
|
|
||||||
|
Bridged Command
|
||||||
|
---------------
|
||||||
|
One slightly more complicated communication mode is the so-called
|
||||||
|
"bridged command" using IPMB.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
ipmitool -m 0x94 -t 0x9a raw 6 4
|
||||||
|
55 00
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
ipmitool -m 0x94 -t 0x9a mc selftest
|
||||||
|
Selftest: passed
|
||||||
|
|
||||||
|
|
||||||
|
This still sends the same command 4 (selftest) from netfn 6(application) to
|
||||||
|
the target. However, to do so, the command is encapsulated (by the driver) and
|
||||||
|
sent using the command 0x34 (send message) from netfn 6(application) to KCS.
|
||||||
|
Then KCS is polled by the driver until a message has been received, then the
|
||||||
|
driver uses command 0x33 (get message). The driver also tracks the message
|
||||||
|
and makes sure the response matches the request. Then it decapsultates the
|
||||||
|
message and gives the response back to the application.
|
||||||
|
|
||||||
|
Dual Bridged Command
|
||||||
|
--------------------
|
||||||
|
Things get a little more ugly when the application needs to reach a management
|
||||||
|
controller sitting on an interface (or channel) not directly connected to the
|
||||||
|
BMC/IPMC. In the case the application must encapsulate its message itself and
|
||||||
|
request the IPMC to deal with message tracking itself.
|
||||||
|
|
||||||
|
Its been working well with IPMITOOL on the LAN interface with:
|
||||||
|
ipmitool -H <ip> -U <user> -P <password> -B 0 -T 0x8a -m 0x20 -t 0x7a -b 7
|
||||||
|
mc selftest
|
||||||
|
|
||||||
|
However, trying to dual bridge commands locally with :
|
||||||
|
ipmitool -B 0 -T 0x9a -m 0x94 -t 0x7a -b 7 mc selftest didn't work
|
||||||
|
(it returned the same data as ipmitool -m 0x20 -t 0x7a -b 7 mc selftest )
|
||||||
|
|
||||||
|
The reason was that the "openipmi" interface pluging didn't
|
||||||
|
encapsulate/decapsulate the message and didn't even detect the intent
|
||||||
|
to double bridge the request.
|
||||||
|
|
||||||
|
./src/ipmitool -B 0 -T 0x8a -m 0x94 -t 0x7a -b 7 mc selftest
|
||||||
|
|
||||||
|
-B 0 : transit channel for first bridge level (channel 0: IPMB-0)
|
||||||
|
-T 0x8a : transit destination address (remote IPMC address)
|
||||||
|
-m 0x94 : source address (local IPMC address on IPMB-0)
|
||||||
|
-t 0x7a : remote target (AMC IPMB-L address)
|
||||||
|
-b 7 : remote channel (channel 7: IPMB-L)
|
||||||
|
|
||||||
|
The transit source address (remote IPMC address on remote channel) is
|
||||||
|
automatically assigned by the remote IPMC.
|
||||||
|
|
||||||
|
Payload Size Limit
|
||||||
|
------------------
|
||||||
|
Because some commands return a lot of data (fru read/get sdr) and because 2
|
||||||
|
levels of encapsulation are used, some command will fail.
|
||||||
|
|
||||||
|
For instance this works.
|
||||||
|
|
||||||
|
ipmitool -H <ip> -U <user> -P <password> -B 0 -T 0x8a -m 0x94 -t 0x7a -b 7
|
||||||
|
mc selftest
|
||||||
|
|
||||||
|
but this does not:
|
||||||
|
|
||||||
|
ipmitool -H <ip> -U <user> -P <password> -B 0 -T 0x8a -m 0x94 -t 0x7a -b 7
|
||||||
|
fru print.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
@ -293,17 +396,16 @@ ipmievd: Memory Sensor 01 - Correctable ECC
|
|||||||
Resources
|
Resources
|
||||||
=========
|
=========
|
||||||
IPMItool homepage
|
IPMItool homepage
|
||||||
http://ipmitool.sourceforge.net
|
http://github.com/ipmitool/ipmitool
|
||||||
|
|
||||||
IPMItool manpage
|
IPMItool manpage
|
||||||
http://ipmitool.sourceforge.net/manpage.html
|
https://github.com/ipmitool/ipmitool/blob/master/doc/ipmitool.1.in
|
||||||
|
|
||||||
IPMItool overview paper from Linux.conf.au 2004
|
|
||||||
http://ipmitool.sourceforge.net/lca2004_ipmitool.pdf
|
|
||||||
|
|
||||||
Intelligent Platform Management Interface specification
|
Intelligent Platform Management Interface specification
|
||||||
http://www.intel.com/design/servers/ipmi/spec.htm
|
https://www.intel.com/content/www/us/en/servers/ipmi/ipmi-home.html
|
||||||
|
|
||||||
OpenIPMI project: Linux IPMI kernel driver and userland library
|
OpenIPMI project: Linux IPMI kernel driver and userland library
|
||||||
http://openipmi.sourceforge.net
|
http://openipmi.sourceforge.net
|
||||||
|
|
||||||
|
IPMItool commit archive
|
||||||
|
https://lists.sourceforge.net/lists/listinfo/ipmitool-cvs
|
@ -31,7 +31,15 @@
|
|||||||
# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
aclocal
|
aclocal
|
||||||
libtoolize --automake --copy
|
|
||||||
|
case `uname` in
|
||||||
|
Darwin*)
|
||||||
|
glibtoolize --automake --copy
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
libtoolize --automake --copy
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
autoheader
|
autoheader
|
||||||
automake --foreign --add-missing --copy
|
automake --foreign --add-missing --copy
|
790
configure.ac
Normal file
790
configure.ac
Normal file
@ -0,0 +1,790 @@
|
|||||||
|
dnl
|
||||||
|
dnl autoconf for ipmitool
|
||||||
|
dnl
|
||||||
|
m4_define([git_suffix], m4_esyscmd_s(./csv-revision))
|
||||||
|
AC_INIT([ipmitool], [1.8.19git_suffix])
|
||||||
|
AC_CONFIG_SRCDIR([src/ipmitool.c])
|
||||||
|
AC_CONFIG_COMMANDS_PRE([export prefix=$prefix])
|
||||||
|
AC_CANONICAL_SYSTEM
|
||||||
|
AM_INIT_AUTOMAKE([foreign])
|
||||||
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
AC_PREREQ(2.50)
|
||||||
|
AC_SUBST(ac_configure_args)
|
||||||
|
|
||||||
|
dnl check for requirements
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_LN_S
|
||||||
|
AC_PROG_MAKE_SET
|
||||||
|
AC_CHECK_PROG([RPMBUILD], [rpmbuild], [rpmbuild], [rpm])
|
||||||
|
AC_CHECK_PROG([SED], [sed], [sed])
|
||||||
|
|
||||||
|
AC_HEADER_STDC
|
||||||
|
AC_CHECK_HEADERS([stdlib.h string.h sys/ioctl.h sys/stat.h unistd.h paths.h])
|
||||||
|
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h sys/socket.h])
|
||||||
|
AC_CHECK_HEADERS([sys/byteorder.h byteswap.h])
|
||||||
|
|
||||||
|
AC_C_CONST
|
||||||
|
AC_C_INLINE
|
||||||
|
AC_C_BIGENDIAN
|
||||||
|
|
||||||
|
AC_FUNC_SELECT_ARGTYPES
|
||||||
|
AC_FUNC_STRTOD
|
||||||
|
AC_CHECK_FUNCS([alarm gethostbyname getaddrinfo getifaddrs socket select])
|
||||||
|
AC_CHECK_FUNCS([memmove memset strchr strdup strerror])
|
||||||
|
AC_CHECK_FUNCS([getpassphrase])
|
||||||
|
|
||||||
|
CFLAGS="$CFLAGS -Wall -Wextra -std=gnu11 -pedantic -Wformat -Wformat-nonliteral"
|
||||||
|
|
||||||
|
AM_PROG_LIBTOOL
|
||||||
|
LIBTOOL="$LIBTOOL --silent"
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS([gethostbyname], [nsl])
|
||||||
|
AC_SEARCH_LIBS([getaddrinfo], [nsl])
|
||||||
|
AC_SEARCH_LIBS([getifaddrs], [nsl])
|
||||||
|
AC_SEARCH_LIBS([socket], [socket], [],
|
||||||
|
[AC_CHECK_LIB([nsl], [socket],
|
||||||
|
[LIBS="$LIBS -lsocket -lnsl"], [], [-lsocket])])
|
||||||
|
|
||||||
|
if test "x$prefix" = "xNONE"; then
|
||||||
|
prefix="$ac_default_prefix"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$exec_prefix" = "xNONE"; then
|
||||||
|
exec_prefix="$prefix"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl allow enabling/disabling the fetching of the IANA PEN registry
|
||||||
|
AC_ARG_ENABLE([registry-download],
|
||||||
|
[AC_HELP_STRING([--enable-registry-download],
|
||||||
|
[download/install the IANA PEN registry [default=yes]])],
|
||||||
|
[xenable_registry_download=$enableval],
|
||||||
|
[xenable_registry_download=yes])
|
||||||
|
|
||||||
|
AM_CONDITIONAL([DOWNLOAD], [false])
|
||||||
|
|
||||||
|
if test "x$xenable_registry_download" = "xyes"; then
|
||||||
|
AC_CHECK_PROG([WGET], [wget], [wget])
|
||||||
|
AC_CHECK_PROG([CURL], [curl], [curl])
|
||||||
|
|
||||||
|
if test "x$WGET" = "x" && test "x$CURL" = "x"; then
|
||||||
|
AC_MSG_WARN([** Neither wget nor curl could be found.])
|
||||||
|
AC_MSG_WARN([** IANA PEN database will not be installed by `make install` !])
|
||||||
|
else
|
||||||
|
AM_CONDITIONAL([DOWNLOAD], [true])
|
||||||
|
if test "x$WGET" != "x"; then
|
||||||
|
DOWNLOAD="$WGET -c -nd -O -"
|
||||||
|
else
|
||||||
|
DOWNLOAD="$CURL --location --progress-bar"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_WARN([** Download is: $DOWNLOAD])
|
||||||
|
AC_SUBST(DOWNLOAD, $DOWNLOAD)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl set default option values
|
||||||
|
dnl
|
||||||
|
|
||||||
|
xenable_all_options=yes
|
||||||
|
xenable_intf_bmc=no
|
||||||
|
xenable_intf_dbus=no
|
||||||
|
xenable_intf_dummy=no
|
||||||
|
xenable_intf_imb=yes
|
||||||
|
xenable_intf_lipmi=yes
|
||||||
|
xenable_intf_open=yes
|
||||||
|
#xenable_intf_serial=yes
|
||||||
|
xenable_intf_usb=no
|
||||||
|
xenable_ipmishell=yes
|
||||||
|
|
||||||
|
dnl set some things so we build with GNU tools on Solaris
|
||||||
|
case "$host_os" in
|
||||||
|
solaris*)
|
||||||
|
MAKE=gmake
|
||||||
|
STRIP=gstrip
|
||||||
|
LD=gld
|
||||||
|
AR=gar
|
||||||
|
# openssl libs are in /usr/sfw/lib on solaris 10
|
||||||
|
LIBS="$LIBS -R/usr/sfw/lib"
|
||||||
|
# disable the linux-specific interfaces
|
||||||
|
xenable_intf_bmc=yes
|
||||||
|
xenable_intf_imb=no
|
||||||
|
xenable_intf_open=no
|
||||||
|
xenable_intf_lipmi=no
|
||||||
|
xenable_ipmishell=no
|
||||||
|
xenable_all_options=no
|
||||||
|
;;
|
||||||
|
*cygwin*)
|
||||||
|
# disable the linux and solaris-specific interfaces
|
||||||
|
xenable_intf_imb=no
|
||||||
|
xenable_intf_open=no
|
||||||
|
xenable_intf_lipmi=no
|
||||||
|
;;
|
||||||
|
*darwin*|aix*)
|
||||||
|
# disable the linux and solaris-specific interfaces
|
||||||
|
xenable_intf_imb=no
|
||||||
|
xenable_intf_open=no
|
||||||
|
xenable_intf_lipmi=no
|
||||||
|
xenable_ipmishell=no
|
||||||
|
;;
|
||||||
|
*freebsd*)
|
||||||
|
xenable_intf_imb=no
|
||||||
|
xenable_intf_lipmi=no
|
||||||
|
CFLAGS="$CFLAGS -D__BSD_VISIBLE"
|
||||||
|
;;
|
||||||
|
*netbsd*)
|
||||||
|
xenable_intf_imb=no
|
||||||
|
xenable_intf_lipmi=no
|
||||||
|
xenable_intf_open=no
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
# disable the linux and solaris-specific interfaces on Hurd
|
||||||
|
xenable_intf_imb=no
|
||||||
|
xenable_intf_open=no
|
||||||
|
xenable_intf_usb=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SUBST(ARCH, $host_cpu)
|
||||||
|
AC_SUBST(OS, $host_os)
|
||||||
|
AC_SUBST(PSTAMP, $host)
|
||||||
|
AC_SUBST(BASEDIR, $prefix)
|
||||||
|
|
||||||
|
dnl allow solaris builds to include all options
|
||||||
|
AC_ARG_ENABLE([solaris-opt],
|
||||||
|
[AC_HELP_STRING([--enable-solaris-opt],
|
||||||
|
[enable all options for Solaris [default=no]])],
|
||||||
|
[xenable_solaris_opt=$enableval],
|
||||||
|
[xenable_solaris_opt=no])
|
||||||
|
if test "x$xenable_all_options" = "xyes" || test "x$xenable_solaris_opt" = "xyes"; then
|
||||||
|
AC_DEFINE(ENABLE_ALL_OPTIONS, [1], [Define to 1 to enable all command line options.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl Determine anonymous union/structure support in GCC
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <stdio.h>
|
||||||
|
], [
|
||||||
|
struct test {
|
||||||
|
union {
|
||||||
|
int a;
|
||||||
|
unsigned int b;
|
||||||
|
};
|
||||||
|
} test;
|
||||||
|
|
||||||
|
printf("a is %d", test.a);
|
||||||
|
], ac_need_fms_extension=no, ac_need_fms_extension=yes)
|
||||||
|
if test "x$ac_need_fms_extension" = "xyes"; then
|
||||||
|
CFLAGS="$CFLAGS -fms-extensions"
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl check for OpenSSL functionality
|
||||||
|
AC_ARG_ENABLE([internal-md5],
|
||||||
|
[AC_HELP_STRING([--enable-internal-md5],
|
||||||
|
[enable internal MD5 library [default=no]])],
|
||||||
|
[xenable_internal_md5=$enableval],
|
||||||
|
[xenable_internal_md5=no])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([crypto], [EVP_aes_128_cbc],
|
||||||
|
[if test "x$xenable_internal_md5" != "xyes"; then
|
||||||
|
have_crypto=yes; LIBS="$LIBS -lcrypto"
|
||||||
|
fi],
|
||||||
|
[have_crypto=no], [-lcrypto])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([crypto], [EVP_sha256],
|
||||||
|
[if test "x$xenable_internal_sha256" != "xyes"; then
|
||||||
|
if test "x$have_crypto" != "xyes"; then
|
||||||
|
LIBS="$LIBS -lcrypto"
|
||||||
|
have_sha256=yes
|
||||||
|
fi
|
||||||
|
AC_DEFINE(HAVE_CRYPTO_SHA256, [1], [Define to 1 if libcrypto supports SHA256.])
|
||||||
|
fi],
|
||||||
|
[], [-lcrypto])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([crypto], [MD5_Init],
|
||||||
|
[if test "x$xenable_internal_md5" != "xyes"; then
|
||||||
|
if test "x$have_crypto" != "xyes"; then
|
||||||
|
LIBS="$LIBS -lcrypto"
|
||||||
|
have_md5=yes
|
||||||
|
fi
|
||||||
|
AC_DEFINE(HAVE_CRYPTO_MD5, [1], [Define to 1 if libcrypto supports MD5.])
|
||||||
|
fi],
|
||||||
|
[], [-lcrypto])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([crypto], [MD2_Init],
|
||||||
|
[if test "x$xenable_internal_md5" != "xyes"; then
|
||||||
|
if test "x$have_crypto" != "xyes" && test "x$have_md5" != "xyes"; then
|
||||||
|
LIBS="$LIBS -lcrypto"
|
||||||
|
have_md2=yes
|
||||||
|
fi
|
||||||
|
AC_DEFINE(HAVE_CRYPTO_MD2, [1], [Define to 1 if libcrypto supports MD2.])
|
||||||
|
fi],
|
||||||
|
[], [-lcrypto])
|
||||||
|
|
||||||
|
dnl check for libsystemd in case dbus-intf is requested
|
||||||
|
AC_CHECK_LIB([systemd], [sd_bus_default],
|
||||||
|
[
|
||||||
|
LIBS="$LIBS -lsystemd"
|
||||||
|
have_systemd=yes
|
||||||
|
],
|
||||||
|
[ have_systemd=no],[])
|
||||||
|
|
||||||
|
dnl enable IPMIv1.5 LAN interface
|
||||||
|
AC_ARG_ENABLE([intf-lan],
|
||||||
|
[AC_HELP_STRING([--enable-intf-lan],
|
||||||
|
[enable IPMIv1.5 LAN interface [default=yes]])],
|
||||||
|
[xenable_intf_lan=$enableval],
|
||||||
|
[xenable_intf_lan=yes])
|
||||||
|
if test "x$xenable_intf_lan" = "xstatic" || test "x$xenable_intf_lan" = "xplugin"; then
|
||||||
|
xenable_intf_lan=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_lan" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_LAN, [1], [Define to 1 to enable LAN IPMIv1.5 interface.])
|
||||||
|
AC_SUBST(INTF_LAN, [lan])
|
||||||
|
AC_SUBST(INTF_LAN_LIB, [libintf_lan.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB lan/libintf_lan.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable IPMI USB interface
|
||||||
|
AC_ARG_ENABLE([intf-usb],
|
||||||
|
[AC_HELP_STRING([--enable-intf-usb],
|
||||||
|
[enable IPMI USB interface [default=auto]])],
|
||||||
|
[xenable_intf_usb=$enableval],
|
||||||
|
[xenable_intf_usb=$xenable_intf_usb])
|
||||||
|
if test "x$xenable_intf_usb" = "xstatic" || test "x$xenable_intf_usb" = "xplugin"; then
|
||||||
|
xenable_intf_usb=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_usb" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_USB, [1], [Define to 1 to enable USB interface.])
|
||||||
|
AC_SUBST(INTF_USB, [usb])
|
||||||
|
AC_SUBST(INTF_USB_LIB, [libintf_usb.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB usb/libintf_usb.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable IPMIv2.0 RMCP+ LAN interface
|
||||||
|
AC_ARG_ENABLE([intf-lanplus],
|
||||||
|
[AC_HELP_STRING([--enable-intf-lanplus],
|
||||||
|
[enable IPMIv2.0 RMCP+ LAN interface [default=auto]])],
|
||||||
|
[xenable_intf_lanplus=$enableval],
|
||||||
|
[xenable_intf_lanplus=$have_crypto])
|
||||||
|
if test "x$xenable_intf_lanplus" = "xstatic" || test "x$xenable_intf_lanplus" = "xplugin"; then
|
||||||
|
xenable_intf_lanplus=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_lanplus" != "xno" && test "x$have_crypto" != "xyes"; then
|
||||||
|
echo "** The lanplus interface requires an SSL library with EVP_aes_128_cbc defined."
|
||||||
|
xenable_intf_lanplus=no
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_lanplus" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_LANPLUS, [1], [Define to 1 to enable LAN+ IPMIv2 interface.])
|
||||||
|
AC_SUBST(INTF_LANPLUS, [lanplus])
|
||||||
|
AC_SUBST(INTF_LANPLUS_LIB, [libintf_lanplus.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB lanplus/libintf_lanplus.la"
|
||||||
|
else
|
||||||
|
xenable_intf_lanplus=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
ORIG_CPPFLAGS=$CPPFLAGS
|
||||||
|
|
||||||
|
dnl enable serial interface
|
||||||
|
AC_ARG_ENABLE([intf-serial],
|
||||||
|
[AC_HELP_STRING([--enable-intf-serial],
|
||||||
|
[enable direct Serial Basic/Terminal mode interface [default=yes]])],
|
||||||
|
[xenable_intf_serial=$enableval], [xenable_intf_serial=yes])
|
||||||
|
if test "x$enable_intf_serial" = "xstatic" || test "x$enable_intf_serial" = "xplugin"; then
|
||||||
|
xenable_intf_serial=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_serial" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_SERIAL, [1], [Define to 1 to enable serial interface.])
|
||||||
|
AC_SUBST(INTF_SERIAL, [serial])
|
||||||
|
AC_SUBST(INTF_SERIAL_LIB, [libintf_serial.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB serial/libintf_serial.la"
|
||||||
|
else
|
||||||
|
xenable_intf_serial=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl look for OpenIPMI header files
|
||||||
|
AC_ARG_WITH([kerneldir],
|
||||||
|
[AC_HELP_STRING([--with-kerneldir=DIR],
|
||||||
|
[set kernel include path to DIR])],
|
||||||
|
[if test "x$with_kerneldir" = "xyes"; then
|
||||||
|
with_kerneldir="/lib/modules/`uname -r`/build"
|
||||||
|
fi
|
||||||
|
CFLAGS="$CFLAGS -I ${with_kerneldir}/include"
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
CPPFLAGS="$CPPFLAGS -I ${with_kerneldir}/include"
|
||||||
|
AC_SUBST(CPPFLAGS)
|
||||||
|
if test -s ${with_kerneldir}/include/linux/version.h ; then
|
||||||
|
kernelver=`grep UTS_RELEASE ${with_kerneldir}/include/linux/version.h | \
|
||||||
|
sed 's/^\#define UTS_RELEASE \"\(2\.[0-9]\)\..*/\1/'`
|
||||||
|
if test "x$kernelver" = "x2.6"; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -D__user="
|
||||||
|
AC_SUBST(CPPFLAGS)
|
||||||
|
fi
|
||||||
|
fi])
|
||||||
|
|
||||||
|
AH_TEMPLATE([HAVE_LINUX_COMPILER_H], [])
|
||||||
|
AC_MSG_CHECKING([for linux/compiler.h])
|
||||||
|
|
||||||
|
m4_version_prereq([2.68],
|
||||||
|
[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <linux/compiler.h>]])],
|
||||||
|
[AC_DEFINE(HAVE_LINUX_COMPILER_H, [1],
|
||||||
|
[Define to 1 if you have the <linux/compiler.h> header file.])
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[AC_MSG_RESULT([no])])],
|
||||||
|
[AC_PREPROC_IFELSE([#include <linux/compiler.h>],
|
||||||
|
[AC_DEFINE(HAVE_LINUX_COMPILER_H, [1],
|
||||||
|
[Define to 1 if you have the <linux/compiler.h> header file.])
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[AC_MSG_RESULT([no])])])
|
||||||
|
|
||||||
|
CPPFLAGS=$ORIG_CPPFLAGS
|
||||||
|
AC_SUBST(CPPFLAGS)
|
||||||
|
|
||||||
|
AC_CHECK_HEADER([sys/ioccom.h],
|
||||||
|
[AC_DEFINE(HAVE_SYS_IOCCOM_H, [1],
|
||||||
|
[Define to 1 if you have the <sys/ioccom.h> header file.])])
|
||||||
|
|
||||||
|
AC_CHECK_HEADER([linux/ipmi.h],
|
||||||
|
[AC_DEFINE(HAVE_OPENIPMI_H, [1],
|
||||||
|
[Define to 1 if you have the <linux/ipmi.h> header file.])],
|
||||||
|
[AC_CHECK_HEADER([sys/ipmi.h],
|
||||||
|
[AC_DEFINE(HAVE_FREEBSD_IPMI_H, [1],
|
||||||
|
[Define to 1 if you have the <sys/ipmi.h> header file.])],
|
||||||
|
[echo "** Unable to find OpenIPMI header files. Using internal version."])])
|
||||||
|
|
||||||
|
dnl look for FreeIPMI files
|
||||||
|
AC_CHECK_LIB(freeipmi, ipmi_open_inband, [have_free=yes], [have_free=no])
|
||||||
|
if test "x$have_free" != "xyes"; then
|
||||||
|
AC_CHECK_LIB(freeipmi, ipmi_ctx_open_inband, [have_free=yes], [have_free=no])
|
||||||
|
fi
|
||||||
|
AC_ARG_ENABLE([intf-free],
|
||||||
|
[AC_HELP_STRING([--enable-intf-free],
|
||||||
|
[enable FreeIPMI IPMI interface [default=auto]])],
|
||||||
|
[xenable_intf_free=$enableval],
|
||||||
|
[xenable_intf_free=$have_free])
|
||||||
|
if test "x$xenable_intf_free" = "xstatic" || test "x$xenable_intf_free" = "xplugin"; then
|
||||||
|
xenable_intf_free=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_free" != "xno" && test "x$have_free" != "xyes"; then
|
||||||
|
echo "** Unable to build FreeIPMI interface support!"
|
||||||
|
xenable_intf_free=no
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_free" = "xyes"; then
|
||||||
|
dnl Determine if you got the right FreeIPMI version
|
||||||
|
AC_MSG_CHECKING([for libfreeipmi version 0.3.0])
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <sys/types.h> /* For size_t */
|
||||||
|
#include <stdio.h> /* For NULL */
|
||||||
|
#include <freeipmi/freeipmi.h>
|
||||||
|
#include <freeipmi/udm/ipmi-udm.h>
|
||||||
|
], [
|
||||||
|
ipmi_device_t dev;
|
||||||
|
dev = ipmi_open_inband(IPMI_DEVICE_KCS,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
0);
|
||||||
|
], ac_free_version_0_3_0=yes, ac_free_version_0_3_0=no)
|
||||||
|
AC_MSG_RESULT($ac_free_version_0_3_0)
|
||||||
|
AC_MSG_CHECKING([for libfreeipmi version 0.4.0])
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <sys/types.h> /* For size_t */
|
||||||
|
#include <stdio.h> /* For NULL */
|
||||||
|
#include <freeipmi/freeipmi.h>
|
||||||
|
#include <freeipmi/udm/ipmi-udm.h>
|
||||||
|
], [
|
||||||
|
ipmi_device_t dev = NULL;
|
||||||
|
int rv;
|
||||||
|
dev = ipmi_device_create();
|
||||||
|
rv = ipmi_open_inband(dev,
|
||||||
|
IPMI_DEVICE_KCS,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
0);
|
||||||
|
], ac_free_version_0_4_0=yes, ac_free_version_0_4_0=no)
|
||||||
|
AC_MSG_RESULT($ac_free_version_0_4_0)
|
||||||
|
AC_MSG_CHECKING([for libfreeipmi version 0.5.0])
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <sys/types.h> /* For size_t */
|
||||||
|
#include <stdio.h> /* For NULL */
|
||||||
|
#include <freeipmi/freeipmi.h>
|
||||||
|
#include <freeipmi/udm/ipmi-udm.h>
|
||||||
|
], [
|
||||||
|
ipmi_device_t dev = NULL;
|
||||||
|
int rv;
|
||||||
|
dev = ipmi_device_create();
|
||||||
|
rv = ipmi_open_inband(dev,
|
||||||
|
IPMI_DEVICE_KCS,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
], ac_free_version_0_5_0=yes, ac_free_version_0_5_0=no)
|
||||||
|
AC_MSG_RESULT($ac_free_version_0_5_0)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for libfreeipmi version 0.6.0])
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <stdio.h> /* For NULL */
|
||||||
|
#include <freeipmi/freeipmi.h>
|
||||||
|
], [
|
||||||
|
ipmi_ctx_t ctx = NULL;
|
||||||
|
int rv;
|
||||||
|
ctx = ipmi_ctx_create();
|
||||||
|
rv = ipmi_ctx_open_inband(ctx,
|
||||||
|
IPMI_DEVICE_KCS,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
], ac_free_version_0_6_0=yes, ac_free_version_0_6_0=no)
|
||||||
|
AC_MSG_RESULT($ac_free_version_0_6_0)
|
||||||
|
|
||||||
|
if test "x$ac_free_version_0_3_0" = "xyes" \
|
||||||
|
|| test "x$ac_free_version_0_4_0" = "xyes" \
|
||||||
|
|| test "x$ac_free_version_0_5_0" = "xyes" \
|
||||||
|
|| test "x$ac_free_version_0_6_0" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_FREE, [1], [Define to 1 to enable FreeIPMI interface.])
|
||||||
|
AC_SUBST(INTF_FREE, [free])
|
||||||
|
AC_SUBST(INTF_FREE_LIB, [libintf_free.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB free/libintf_free.la"
|
||||||
|
if test "x$ac_free_version_0_3_0" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_FREE_0_3_0, [1], [Define to 1 for FreeIPMI 0.3.0.])
|
||||||
|
fi
|
||||||
|
if test "x$ac_free_version_0_4_0" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_FREE_0_4_0, [1], [Define to 1 for FreeIPMI 0.4.0.])
|
||||||
|
fi
|
||||||
|
if test "x$ac_free_version_0_5_0" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_FREE_0_5_0, [1], [Define to 1 for FreeIPMI 0.5.0.])
|
||||||
|
fi
|
||||||
|
if test "x$ac_free_version_0_6_0" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_FREE_0_6_0, [1], [Define to 1 for FreeIPMI 0.6.0.])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
xenable_intf_free=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_LIB(freeipmi,
|
||||||
|
ipmi_cmd_raw_ipmb,
|
||||||
|
AC_DEFINE(IPMI_INTF_FREE_BRIDGING, [1],
|
||||||
|
[Define to 1 to enable FreeIPMI Bridging Support.]))
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl look for termios header file
|
||||||
|
AC_CHECK_HEADER([termios.h],
|
||||||
|
[AC_DEFINE(HAVE_TERMIOS_H, [1], [Define to 1 if you have <termios.h>.])],
|
||||||
|
[AC_CHECK_HEADER([sys/termios.h],
|
||||||
|
[AC_DEFINE(HAVE_SYS_TERMIOS_H, [1], [Define to 1 if you have <sys/termios.h>.])],
|
||||||
|
[echo "** Unable to find termios header file."])])
|
||||||
|
|
||||||
|
dnl set RPM distro tag for use in RPM name
|
||||||
|
AC_ARG_WITH([rpm-distro],
|
||||||
|
[AC_HELP_STRING([--with-rpm-distro=DISTRO],
|
||||||
|
[set Linux distribution tag for use in RPM version string])],
|
||||||
|
[AC_SUBST(DISTRO, $with_rpm_distro)])
|
||||||
|
|
||||||
|
dnl set RPM release tag
|
||||||
|
AC_ARG_WITH([rpm-release],
|
||||||
|
[AC_HELP_STRING([--with-rpm-release=RELEASE],
|
||||||
|
[set release number for RPM release field])],
|
||||||
|
[], [with_rpm_release=1])
|
||||||
|
AC_SUBST(RPM_RELEASE, $with_rpm_release)
|
||||||
|
|
||||||
|
dnl enable Linux OpenIPMI interface
|
||||||
|
AC_ARG_ENABLE([intf-open],
|
||||||
|
[AC_HELP_STRING([--enable-intf-open],
|
||||||
|
[enable Linux OpenIPMI interface [default=auto]])],
|
||||||
|
[xenable_intf_open=$enableval],
|
||||||
|
[])
|
||||||
|
if test "x$xenable_intf_open" = "xstatic" || test "x$xenable_intf_open" = "xplugin"; then
|
||||||
|
xenable_intf_open=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_open" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_OPEN, [1], [Define to 1 to enable Linux OpenIPMI interface.])
|
||||||
|
AC_SUBST(INTF_OPEN, [open])
|
||||||
|
AC_SUBST(INTF_OPEN_LIB, [libintf_open.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB open/libintf_open.la"
|
||||||
|
|
||||||
|
dnl Check for dual bridge support in OpenIPMI
|
||||||
|
AC_MSG_CHECKING([for OpenIPMI dual bridge support])
|
||||||
|
have_openipmi_dual_bridge=no
|
||||||
|
ORIG_CPPFLAGS="$CPPFLAGS"
|
||||||
|
CPPFLAGS="$CPPFLAGS -Isrc/plugins/open -DENABLE_INTF_OPEN_DUAL_BRIDGE"
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#if defined(HAVE_OPENIPMI_H)
|
||||||
|
# if defined(HAVE_LINUX_COMPILER_H)
|
||||||
|
# include <linux/compiler.h>
|
||||||
|
# endif
|
||||||
|
# include <linux/ipmi.h>
|
||||||
|
#elif defined(HAVE_FREEBSD_IPMI_H)
|
||||||
|
# include <sys/ipmi.h>
|
||||||
|
#else
|
||||||
|
# include "open.h"
|
||||||
|
#endif
|
||||||
|
], [
|
||||||
|
struct ipmi_ipmb_addr a;
|
||||||
|
a.transit_slave_addr = 0;
|
||||||
|
], [have_openipmi_dual_bridge=yes])
|
||||||
|
if test x"$have_openipmi_dual_bridge" = x"yes"; then
|
||||||
|
AC_DEFINE(ENABLE_INTF_OPEN_DUAL_BRIDGE, [1],
|
||||||
|
[Define to 1 to enable OpenIPMI interface dual bridge support])
|
||||||
|
fi
|
||||||
|
CPPFLAGS="$ORIG_CPPFLAGS"
|
||||||
|
AC_MSG_RESULT([$have_openipmi_dual_bridge])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable Intel IMB interface
|
||||||
|
AC_ARG_ENABLE([intf-imb],
|
||||||
|
[AC_HELP_STRING([--enable-intf-imb],
|
||||||
|
[enable Intel IMB driver interface [default=auto]])],
|
||||||
|
[xenable_intf_imb=$enableval],
|
||||||
|
[])
|
||||||
|
if test "x$xenable_intf_imb" = "xstatic" || test "x$xenable_intf_imb" = "xplugin"; then
|
||||||
|
xenable_intf_imb=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_imb" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_IMB, [1], [Define to 1 to enable Intel IMB interface.])
|
||||||
|
AC_SUBST(INTF_IMB, [imb])
|
||||||
|
AC_SUBST(INTF_IMB_LIB, [libintf_imb.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB imb/libintf_imb.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable Solaris LIPMI interface
|
||||||
|
AC_CHECK_HEADER([sys/lipmi/lipmi_intf.h], [have_lipmi=yes], [have_lipmi=no])
|
||||||
|
AC_ARG_ENABLE([intf-lipmi],
|
||||||
|
[AC_HELP_STRING([--enable-intf-lipmi],
|
||||||
|
[enable Solaris 9 x86 IPMI interface [default=no]])],
|
||||||
|
[xenable_intf_lipmi=$enableval],
|
||||||
|
[])
|
||||||
|
if test "x$xenable_intf_lipmi" = "xstatic" || test "x$xenable_intf_lipmi" = "xplugin"; then
|
||||||
|
xenable_intf_lipmi=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_lipmi" != "xno" && test "x$have_lipmi" != "xyes"; then
|
||||||
|
echo "** Unable to build Solaris 9 x86 IPMI interface support!"
|
||||||
|
xenable_intf_lipmi=no
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_lipmi" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_LIPMI, [1], [Define to 1 to enable Solaris 9 LIPMI interface.])
|
||||||
|
AC_SUBST(INTF_LIPMI, [lipmi])
|
||||||
|
AC_SUBST(INTF_LIPMI_LIB, [libintf_lipmi.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB lipmi/libintf_lipmi.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable Solaris BMC interface
|
||||||
|
AC_ARG_ENABLE([intf-bmc],
|
||||||
|
[AC_HELP_STRING([--enable-intf-bmc],
|
||||||
|
[enable Solaris 10 x86 IPMI interface [default=auto]])],
|
||||||
|
[xenable_intf_bmc=$enableval],
|
||||||
|
[xenable_intf_bmc=no])
|
||||||
|
if test "x$xenable_intf_bmc" = "xstatic" || test "x$xenable_intf_bmc" = "xplugin"; then
|
||||||
|
xenable_intf_bmc=yes
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_bmc" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_BMC, [1], [Define to 1 to enable Solaris 10 BMC interface.])
|
||||||
|
AC_SUBST(INTF_BMC, [bmc])
|
||||||
|
AC_SUBST(INTF_BMC_LIB, [libintf_bmc.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB bmc/libintf_bmc.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable IPMI dbus interface
|
||||||
|
AC_ARG_ENABLE([intf-dbus],
|
||||||
|
[AC_HELP_STRING([--enable-intf-dbus],
|
||||||
|
[enable IPMI dbus interface [default=no]])],
|
||||||
|
[xenable_intf_dbus=$enableval],
|
||||||
|
[xenable_intf_dbus=no])
|
||||||
|
if test "x$xenable_intf_dbus" != "xno"; then
|
||||||
|
if test "x$have_systemd" != "xyes"; then
|
||||||
|
AC_MSG_ERROR([** Unable to find libsystemd required by dbus-intf.])
|
||||||
|
xenable_intf_dbus=no
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test "x$xenable_intf_dbus" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_DBUS, [1], [Define to 1 to enable dbus interface.])
|
||||||
|
AC_SUBST(INTF_DBUS, [dbus])
|
||||||
|
AC_SUBST(INTF_DBUS_LIB, [libintf_dbus.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB dbus/libintf_dbus.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl enable Dummy interface for testing
|
||||||
|
AC_ARG_ENABLE([intf-dummy],
|
||||||
|
[AC_HELP_STRING([--enable-intf-dummy],
|
||||||
|
[enable Dummy(test) interface [default=no]])],
|
||||||
|
[xenable_intf_dummy=$enableval], [xenable_intf_dummy=no])
|
||||||
|
if test "x$xenable_intf_dummy" = "xyes"; then
|
||||||
|
AC_DEFINE(IPMI_INTF_DUMMY, [1], [Define to 1 to enable Dummy interface.])
|
||||||
|
AC_SUBST(INTF_DUMMY, [dummy])
|
||||||
|
AC_SUBST(INTF_DUMMY_LIB, [libintf_dummy.la])
|
||||||
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB dummy/libintf_dummy.la"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(IPMITOOL_INTF_LIB)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([ipmishell],
|
||||||
|
[AC_HELP_STRING([--enable-ipmishell],
|
||||||
|
[enable IPMI shell interface [default=auto]])],
|
||||||
|
[xenable_ipmishell=$enableval],
|
||||||
|
[])
|
||||||
|
|
||||||
|
dnl check for readline library to enable ipmi shell
|
||||||
|
if test "x$xenable_ipmishell" = "xyes"; then
|
||||||
|
PKG_PROG_PKG_CONFIG
|
||||||
|
PKG_CHECK_MODULES([READLINE], [readline],
|
||||||
|
[LIBS="$LIBS $READLINE_LIBS" have_readline=yes],
|
||||||
|
[AC_SEARCH_LIBS([readline], [readline edit], [have_readline=yes])]
|
||||||
|
)
|
||||||
|
if test "x$have_readline" != "xyes"; then
|
||||||
|
AC_MSG_ERROR([** Unable to find readline required by ipmishell.])
|
||||||
|
xenable_ipmishell=no
|
||||||
|
fi
|
||||||
|
AC_DEFINE(HAVE_READLINE, [1], [Define to 1 if readline present.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl Enable -Wall -Werror
|
||||||
|
AC_ARG_ENABLE([buildcheck],
|
||||||
|
[AC_HELP_STRING([--enable-buildcheck],
|
||||||
|
[enable -Wall -Werror for build testing [default=no]])],
|
||||||
|
[xenable_buildcheck=$enableval],
|
||||||
|
[xenable_buildcheck=no])
|
||||||
|
if test "x$xenable_buildcheck" != "xno"; then
|
||||||
|
CFLAGS="$CFLAGS -Wall -Werror -Wpointer-arith -Wstrict-prototypes"
|
||||||
|
fi
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
|
||||||
|
dnl Enable extra file security paranoia
|
||||||
|
AC_ARG_ENABLE([file-security],
|
||||||
|
[AC_HELP_STRING([--enable-file-security],
|
||||||
|
[enable extra security checks on files opened for read [default=no]])],
|
||||||
|
[xenable_file_security=$enableval],
|
||||||
|
[xenable_file_security=no])
|
||||||
|
if test "x$xenable_file_security" != "xno"; then
|
||||||
|
AC_DEFINE(ENABLE_FILE_SECURITY, [1], [Define to 1 for extra file security.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
AC_TRY_COMPILE([],[
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
struct packstruct {
|
||||||
|
unsigned char t0 :5;
|
||||||
|
unsigned char t1 :5;
|
||||||
|
unsigned char t2 :5;
|
||||||
|
unsigned char t3 :5;
|
||||||
|
unsigned char t4 :4;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char ** argv)
|
||||||
|
{
|
||||||
|
if(sizeof(struct packstruct) != 3)
|
||||||
|
return(1);
|
||||||
|
else
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[],
|
||||||
|
[AC_DEFINE(HAVE_PRAGMA_PACK,[1],
|
||||||
|
[Define to 1 if you need to use #pragma pack instead of __attribute__ ((packed))])]
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl if no environment variable is set, set the default value for the default intf
|
||||||
|
if test "${xenable_intf_open}" = "yes"; then
|
||||||
|
DEFAULT_INTF_NO_ENV=open
|
||||||
|
else dnl macOS does not build open interface, it defaults to lan
|
||||||
|
DEFAULT_INTF_NO_ENV=lan
|
||||||
|
fi
|
||||||
|
dnl allow for a default interface to be set on configure
|
||||||
|
AC_ARG_VAR(DEFAULT_INTF, [Set the default interface to use (default='open' if available, 'lan' otherwise)])
|
||||||
|
|
||||||
|
dnl set the default value for the default interface environment variable
|
||||||
|
if test "x${DEFAULT_INTF}" = "x"; then
|
||||||
|
echo "DEFAULT_INTF not found in environment; setting to ${DEFAULT_INTF_NO_ENV}"
|
||||||
|
DEFAULT_INTF=${DEFAULT_INTF_NO_ENV}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x"`eval "echo \\\${xenable_intf_${DEFAULT_INTF}}"` != "xyes"; then
|
||||||
|
AC_MSG_ERROR([** Cannot set ${DEFAULT_INTF} as default; intf-${DEFAULT_INTF} is not enabled.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_ARG_VAR(IANADIR, [Configure the path to IANA PEN dictionary (default=DATAROOTDIR/misc)])
|
||||||
|
AC_ARG_VAR(IANAUSERDIR, [Configure the path to IANA PEN dictionary wihtin the user's HOME directory (default=.local/usr/share/misc)])
|
||||||
|
|
||||||
|
if test "x${IANADIR}" = "x"; then
|
||||||
|
IANADIR=`eval echo "${datarootdir}/misc"`
|
||||||
|
echo Set IANA PEN dictionary search path to ${IANADIR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${IANAUSERDIR}" = "x"; then
|
||||||
|
IANAUSERDIR=".local/usr/share/misc"
|
||||||
|
echo Set user\'s IANA PEN dictionary search path to ${IANAUSERDIR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
AH_TEMPLATE([IANADIR],[The path to system IANA PEN dictionary])
|
||||||
|
AC_DEFINE_UNQUOTED(IANADIR, "`eval "echo ${IANADIR}"`", [])
|
||||||
|
|
||||||
|
AH_TEMPLATE([IANAUSERDIR],[The subpath to user IANA PEN dictionary within the user's HOME])
|
||||||
|
AC_DEFINE_UNQUOTED(IANAUSERDIR, "`eval "echo ${IANAUSERDIR}"`", [])
|
||||||
|
|
||||||
|
AH_TEMPLATE([PATH_SEPARATOR], [The path separator string])
|
||||||
|
#if defined _WIN32 || defined __CYGWIN__
|
||||||
|
AC_DEFINE(PATH_SEPARATOR, "\\")
|
||||||
|
#else
|
||||||
|
AC_DEFINE(PATH_SEPARATOR, "/")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
dnl Generate files for build
|
||||||
|
AC_CONFIG_FILES([Makefile
|
||||||
|
doc/Makefile
|
||||||
|
contrib/Makefile
|
||||||
|
control/Makefile
|
||||||
|
control/pkginfo
|
||||||
|
control/prototype
|
||||||
|
control/ipmitool.spec
|
||||||
|
lib/Makefile
|
||||||
|
include/Makefile
|
||||||
|
include/ipmitool/Makefile
|
||||||
|
src/Makefile
|
||||||
|
src/plugins/Makefile
|
||||||
|
src/plugins/lan/Makefile
|
||||||
|
src/plugins/lanplus/Makefile
|
||||||
|
src/plugins/open/Makefile
|
||||||
|
src/plugins/free/Makefile
|
||||||
|
src/plugins/imb/Makefile
|
||||||
|
src/plugins/bmc/Makefile
|
||||||
|
src/plugins/dbus/Makefile
|
||||||
|
src/plugins/usb/Makefile
|
||||||
|
src/plugins/lipmi/Makefile
|
||||||
|
src/plugins/serial/Makefile
|
||||||
|
src/plugins/dummy/Makefile
|
||||||
|
doc/ipmitool.1
|
||||||
|
doc/ipmievd.8])
|
||||||
|
|
||||||
|
AC_OUTPUT
|
||||||
|
|
||||||
|
AC_MSG_RESULT([])
|
||||||
|
AC_MSG_RESULT([ipmitool $VERSION])
|
||||||
|
AC_MSG_RESULT([])
|
||||||
|
AC_MSG_RESULT([Interfaces (default=$DEFAULT_INTF)])
|
||||||
|
AC_MSG_RESULT([ lan : $xenable_intf_lan])
|
||||||
|
AC_MSG_RESULT([ lanplus : $xenable_intf_lanplus])
|
||||||
|
AC_MSG_RESULT([ open : $xenable_intf_open])
|
||||||
|
AC_MSG_RESULT([ free : $xenable_intf_free])
|
||||||
|
AC_MSG_RESULT([ imb : $xenable_intf_imb])
|
||||||
|
AC_MSG_RESULT([ bmc : $xenable_intf_bmc])
|
||||||
|
AC_MSG_RESULT([ dbus : $xenable_intf_dbus])
|
||||||
|
AC_MSG_RESULT([ usb : $xenable_intf_usb])
|
||||||
|
AC_MSG_RESULT([ lipmi : $xenable_intf_lipmi])
|
||||||
|
AC_MSG_RESULT([ serial : $xenable_intf_serial])
|
||||||
|
AC_MSG_RESULT([ dummy : $xenable_intf_dummy])
|
||||||
|
AC_MSG_RESULT([])
|
||||||
|
AC_MSG_RESULT([Extra tools])
|
||||||
|
AC_MSG_RESULT([ ipmievd : yes])
|
||||||
|
AC_MSG_RESULT([ ipmishell : $xenable_ipmishell])
|
||||||
|
AC_MSG_RESULT([])
|
||||||
|
|
@ -30,8 +30,12 @@
|
|||||||
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
EXTRA_DIST = README oem_ibm_sel_map \
|
dist_pkgdata_DATA = oem_ibm_sel_map
|
||||||
bmclanconf ipmi.init.basic ipmi.init.redhat \
|
|
||||||
ipmievd.init.redhat ipmievd.init.suse ipmievd.init.debian \
|
|
||||||
collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh
|
|
||||||
|
|
||||||
|
EXTRA_DIST = README \
|
||||||
|
bmclanconf ipmi.init.basic ipmi.init.redhat \
|
||||||
|
exchange-bmc-os-info.init.redhat exchange-bmc-os-info.service.redhat \
|
||||||
|
exchange-bmc-os-info.sysconf log_bmc.sh\
|
||||||
|
ipmievd.init.redhat ipmievd.init.suse ipmievd.init.debian \
|
||||||
|
collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh \
|
||||||
|
bmc-snmp-proxy bmc-snmp-proxy.service bmc-snmp-proxy.sysconf
|
403
contrib/bmc-snmp-proxy
Normal file
403
contrib/bmc-snmp-proxy
Normal file
@ -0,0 +1,403 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# bmc-snmp-proxy: Set SNMP proxy to BMC (Baseboard Management Controller)
|
||||||
|
#
|
||||||
|
# version: 0.62
|
||||||
|
#
|
||||||
|
# Authors: Charles Rose <charles_rose@dell.com>
|
||||||
|
# Jordan Hargrave <jordan_hargrave@dell.com>
|
||||||
|
#
|
||||||
|
# Description: Script to set snmp proxy to the BMC for certain OID
|
||||||
|
# See here for details:
|
||||||
|
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
||||||
|
#
|
||||||
|
# Assumptions: This script will work only when /etc/snmp/ is writable.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
# GLOBALS
|
||||||
|
#############################################################################
|
||||||
|
SYSCONF_DIR="/etc/sysconfig"
|
||||||
|
CONFIG="${SYSCONF_DIR}/bmc-snmp-proxy"
|
||||||
|
|
||||||
|
SNMPD_BMC_CONF_DIR="/etc/snmp/bmc"
|
||||||
|
SNMPD_BMC_CONF="${SNMPD_BMC_CONF_DIR}/snmpd.local.conf"
|
||||||
|
TRAPD_BMC_CONF="${SNMPD_BMC_CONF_DIR}/snmptrapd.local.conf"
|
||||||
|
|
||||||
|
TRAPD_CONF="/etc/snmp/snmptrapd.conf"
|
||||||
|
|
||||||
|
LOCKFILE="/var/lock/subsys/bmc-snmp-proxy"
|
||||||
|
BMC_INFO="/run/bmc-info"
|
||||||
|
|
||||||
|
IPMITOOL=$(which ipmitool)
|
||||||
|
|
||||||
|
#Default config
|
||||||
|
BMC_COMMUNITY="public"
|
||||||
|
BMC_OID=".1.3.6.1.4.1.674.10892.2" # Dell iDRAC
|
||||||
|
TRAP_FORWARD="no"
|
||||||
|
RELOAD_SERVICES="yes"
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
#TODO: Use inotify and daemonize when $BMC_INFO changes
|
||||||
|
|
||||||
|
# source config
|
||||||
|
[ -r ${CONFIG} ] && . ${CONFIG}
|
||||||
|
|
||||||
|
. gettext.sh
|
||||||
|
|
||||||
|
SCRIPT_NAME=$(basename $0)
|
||||||
|
RETVAL=0
|
||||||
|
|
||||||
|
# Check if bmc-info created by exchange-bmc-os-info
|
||||||
|
bmc_info_exists()
|
||||||
|
{
|
||||||
|
if [ -r "${BMC_INFO}" ]; then
|
||||||
|
. ${BMC_INFO}
|
||||||
|
else
|
||||||
|
RETVAL=2
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
check_snmp()
|
||||||
|
{
|
||||||
|
if [ ! -d /etc/snmp ] || [ ! -x /usr/sbin/snmpd ]; then
|
||||||
|
RETVAL=12
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# configure SNMP proxy
|
||||||
|
#############################################################################
|
||||||
|
write_snmp_conf()
|
||||||
|
{
|
||||||
|
# SNMPv3 security: bmcview, bmc_ctx, bmc_sec, bmc_grp, bmc_cmty
|
||||||
|
printf "###############################################\n"
|
||||||
|
printf "# Automatically created by %s #\n" "${SCRIPT_NAME}"
|
||||||
|
printf "###############################################\n"
|
||||||
|
printf "#view bmcview included %s 80\n" "${BMC_OID}"
|
||||||
|
printf "#com2sec -Cn bmc_ctx bmc_sec default bmc_cmty\n"
|
||||||
|
printf "#group bmc_grp v1 bmc_sec\n"
|
||||||
|
printf "#access bmc_grp bmc_ctx any noauth exact bmcview none none\n"
|
||||||
|
printf "#proxy -Cn bmc_ctx -v 1 %s\n" "${PROXY_TOKEN}"
|
||||||
|
printf "proxy -v 1 %s\n" "${PROXY_TOKEN}"
|
||||||
|
printf "###############################################\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
valid_ip()
|
||||||
|
{
|
||||||
|
#Thanks to mkyong.com
|
||||||
|
octet="([01]?[[:digit:]][[:digit:]]?|2[0-4][[:digit:]]|25[0-5])"
|
||||||
|
|
||||||
|
printf -- "%s" "${1}"| grep -Eq \
|
||||||
|
"^${octet}\\.${octet}\\.${octet}\\.${octet}$"
|
||||||
|
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
check_vars()
|
||||||
|
{
|
||||||
|
[ -z ${BMC_COMMUNITY} ] && BMC_COMMUNITY="public"
|
||||||
|
[ -z ${BMC_OID} ] && return 1
|
||||||
|
|
||||||
|
if [ -n "${BMC_IPv4}" ] && valid_ip ${BMC_IPv4}; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_snmp_proxy()
|
||||||
|
{
|
||||||
|
if check_vars; then
|
||||||
|
PROXY_TOKEN="-c ${BMC_COMMUNITY} ${BMC_IPv4} ${BMC_OID}"
|
||||||
|
|
||||||
|
if [ -d ${SNMPD_BMC_CONF_DIR} ]; then
|
||||||
|
write_snmp_conf > ${SNMPD_BMC_CONF} || RETVAL=4
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
RETVAL=3
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_snmpd_conf_path()
|
||||||
|
{
|
||||||
|
if [ ! -d ${SNMPD_BMC_CONF_DIR} ]; then
|
||||||
|
mkdir ${SNMPD_BMC_CONF_DIR} || RETVAL=7
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We need SNMPCONFPATH set for both snmpd and snmptrapd
|
||||||
|
for sysconf in ${SYSCONF_DIR}/snmp*d;
|
||||||
|
do
|
||||||
|
if ! grep -q "^SNMPCONFPATH.*${SNMPD_BMC_CONF_DIR}" \
|
||||||
|
"${sysconf}" > /dev/null 2>&1; then
|
||||||
|
printf "SNMPCONFPATH=/etc/snmp:%s\n" \
|
||||||
|
"${SNMPD_BMC_CONF_DIR}" >> ${sysconf} || \
|
||||||
|
RETVAL=7
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
disable_snmp_proxy()
|
||||||
|
{
|
||||||
|
if [ -f ${SNMPD_BMC_CONF} ]; then
|
||||||
|
rm -f ${SNMPD_BMC_CONF} || RETVAL=5
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
#############################################################################
|
||||||
|
# Trap Forwarding
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
pick_alert_dest()
|
||||||
|
{
|
||||||
|
test_ip="$1"
|
||||||
|
# We have 4 IPv4 and 4 IPv6 alert dest. We will set IPv4 for now.
|
||||||
|
for ALERT_DEST in $(seq 1 4)
|
||||||
|
do
|
||||||
|
temp_ip=$(${IPMITOOL} lan alert print ${CHANNEL} ${ALERT_DEST}\
|
||||||
|
2>/dev/null| sed -n "s#^Alert IP Address.*: ##p")
|
||||||
|
|
||||||
|
[ "${temp_ip}" = "${test_ip}" ] && return 0
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
set_alert_dest_ip()
|
||||||
|
{
|
||||||
|
${IPMITOOL} lan alert set ${CHANNEL} ${ALERT_DEST} ipaddr ${1} \
|
||||||
|
retry 4 type pet >/dev/null 2>&1 || RETVAL=8
|
||||||
|
}
|
||||||
|
|
||||||
|
config_bmc_alert_dest()
|
||||||
|
{
|
||||||
|
# call with enable|disable
|
||||||
|
# Pick the first active LAN channel
|
||||||
|
for CHANNEL in $(seq 1 14)
|
||||||
|
do
|
||||||
|
[ $(${IPMITOOL} -I open channel info ${CHANNEL} 2>/dev/null \
|
||||||
|
| grep -q "802\.3") ] || break
|
||||||
|
done
|
||||||
|
|
||||||
|
# If TRAPD_IP is already set as an alert dest,
|
||||||
|
if pick_alert_dest "${TRAPD_IP}"; then
|
||||||
|
# disable: reset it if we are called with disable
|
||||||
|
[ "${1}" = "disable" ] && \
|
||||||
|
set_alert_dest_ip "0.0.0.0"
|
||||||
|
# else, find the next free alert dest,
|
||||||
|
elif pick_alert_dest "0.0.0.0"; then
|
||||||
|
[ "${1}" = "disable" ] && \
|
||||||
|
return $RETVAL
|
||||||
|
# set: the TRAPD_IP
|
||||||
|
set_alert_dest_ip "${TRAPD_IP}"
|
||||||
|
else
|
||||||
|
# No free alert destinations
|
||||||
|
RETVAL=9
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
set_ipmi_pef()
|
||||||
|
{
|
||||||
|
# Needs ipmitool-1.8.13 + patches
|
||||||
|
${IPMITOOL} pef policy set ${ALERT_DEST} "${1}" >/dev/null 2>&1 || \
|
||||||
|
RETVAL=10
|
||||||
|
}
|
||||||
|
|
||||||
|
get_host_ip()
|
||||||
|
{
|
||||||
|
# Get host's IP that the BMC can reach. This is at best a hack.
|
||||||
|
IFACE=$(/usr/sbin/ip -o -f inet address |awk '!/: lo/ {print $2}')
|
||||||
|
|
||||||
|
for dev in ${IFACE}
|
||||||
|
do
|
||||||
|
temp_ping=$(ping -c 1 -I ${dev} ${BMC_IPv4})
|
||||||
|
[ $? -ne 0 ] && continue
|
||||||
|
|
||||||
|
printf -- "%s" "$temp_ping"| awk 'NR==1{print $5}' && break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
config_bmc_alert()
|
||||||
|
{
|
||||||
|
# Do two things
|
||||||
|
# Set/Reset TRAP IP in BMC
|
||||||
|
# Enable/Disable PEF alerting in BMC for TRAP
|
||||||
|
|
||||||
|
# Get Host's IP that the BMC can send traps to
|
||||||
|
TRAPD_IP=$(get_host_ip)
|
||||||
|
|
||||||
|
# Set Host's IP as the alert destination in the BMC
|
||||||
|
valid_ip ${TRAPD_IP} && config_bmc_alert_dest "${ACTION}"
|
||||||
|
|
||||||
|
# Enable/Disable alerting on the LAN channel
|
||||||
|
[ $RETVAL -eq 0 ] && set_ipmi_pef "${ACTION}"
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
write_trapd_conf()
|
||||||
|
{
|
||||||
|
printf "###############################################\n"
|
||||||
|
printf "# Automatically created by %s #\n" "${SCRIPT_NAME}"
|
||||||
|
printf "forward default %s\n" "${FORWARD_HOST}"
|
||||||
|
printf "###############################################\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
config_trapd()
|
||||||
|
{
|
||||||
|
# Proceed only if snmptrapd is available on the system
|
||||||
|
if [ -f ${TRAPD_CONF} ]; then
|
||||||
|
write_trapd_conf > ${TRAPD_BMC_CONF} || RETVAL=11
|
||||||
|
else
|
||||||
|
RETVAL=11
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_sink_exists()
|
||||||
|
{
|
||||||
|
# TODO: We only set the first match. We should be able to set
|
||||||
|
# multiple
|
||||||
|
FORWARD_HOST=$(awk '/^trap.*sink/{print $2}; /^informsink/{print $2}' \
|
||||||
|
/etc/snmp/snmpd*conf | head -1)
|
||||||
|
|
||||||
|
if [ -z "${FORWARD_HOST}" ]; then
|
||||||
|
# there is no trapsink setup.
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Forward SNMP traps from the BMC to trapsink.
|
||||||
|
trap_forward()
|
||||||
|
{
|
||||||
|
NO_TRAP=0
|
||||||
|
ACTION=${1} # enable or disable
|
||||||
|
|
||||||
|
if [ "${ACTION}" = "enable" ]; then
|
||||||
|
# Get trapd config,
|
||||||
|
if trap_sink_exists; then
|
||||||
|
config_bmc_alert && config_trapd
|
||||||
|
else
|
||||||
|
# exit silently if there is no sink
|
||||||
|
NO_TRAP=1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ -f ${TRAPD_BMC_CONF} ]; then
|
||||||
|
rm -f ${TRAPD_BMC_CONF} >/dev/null 2>&1
|
||||||
|
config_bmc_alert
|
||||||
|
else
|
||||||
|
NO_TRAP=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
service_reload()
|
||||||
|
{
|
||||||
|
#TODO: do this in systemd
|
||||||
|
if [ ${RETVAL} -eq 0 ] && [ "${RELOAD_SERVICES}" = "yes" ]; then
|
||||||
|
service $1 reload
|
||||||
|
[ $? -ne 0 ] && RETVAL=6
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
start()
|
||||||
|
{
|
||||||
|
if bmc_info_exists && check_snmp; then
|
||||||
|
touch ${LOCKFILE}
|
||||||
|
|
||||||
|
set_snmpd_conf_path && set_snmp_proxy
|
||||||
|
[ $RETVAL -eq 0 ] && service_reload snmpd
|
||||||
|
|
||||||
|
if [ "${TRAP_FORWARD}" = "yes" ]; then
|
||||||
|
trap_forward "enable"
|
||||||
|
[ $RETVAL -eq 0 ] && [ $NO_TRAP -eq 0 ] && \
|
||||||
|
service_reload snmptrapd
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
stop()
|
||||||
|
{
|
||||||
|
[ ! -f ${LOCKFILE} ] && return
|
||||||
|
if bmc_info_exists && check_snmp; then
|
||||||
|
disable_snmp_proxy
|
||||||
|
[ $RETVAL -eq 0 ] && service_reload snmpd
|
||||||
|
|
||||||
|
if [ "${TRAP_FORWARD}" = "yes" ]; then
|
||||||
|
trap_forward "disable"
|
||||||
|
[ $RETVAL -eq 0 ] && [ $NO_TRAP -eq 0 ] && \
|
||||||
|
service_reload snmptrapd
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f ${LOCKFILE}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
status()
|
||||||
|
{
|
||||||
|
eval_gettext "${SCRIPT_NAME}: snmp proxy to BMC is "
|
||||||
|
# Checking for lockfile is better.
|
||||||
|
#if grep -q "^proxy" "${SNMPD_BMC_CONF}" > /dev/null 2>&1 ; then
|
||||||
|
if [ -f ${LOCKFILE} ]; then
|
||||||
|
eval_gettext "set"
|
||||||
|
else
|
||||||
|
eval_gettext "not set"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
RETVAL=0
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
eval_gettext "Usage: $0 {start|stop|status}"; echo 1>&2
|
||||||
|
RETVAL=1
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# MAIN
|
||||||
|
#############################################################################
|
||||||
|
case "$1" in
|
||||||
|
start) start ;;
|
||||||
|
stop) stop ;;
|
||||||
|
status) status ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$RETVAL" in
|
||||||
|
0|1) ;;
|
||||||
|
2) eval_gettext "${SCRIPT_NAME}: failed to read ${BMC_INFO} " 1>&2 ;;
|
||||||
|
3) eval_gettext "${SCRIPT_NAME}: failed to get proxy config." 1>&2 ;;
|
||||||
|
4) eval_gettext "${SCRIPT_NAME}: failed to set ${SNMPD_BMC_CONF}." 1>&2 ;;
|
||||||
|
5) eval_gettext "${SCRIPT_NAME}: failed to disable snmp proxy." 1>&2 ;;
|
||||||
|
6) eval_gettext "${SCRIPT_NAME}: failed to reload snmpd." 1>&2 ;;
|
||||||
|
7) eval_gettext "${SCRIPT_NAME}: failed to set snmpd config." 1>&2 ;;
|
||||||
|
8) eval_gettext "${SCRIPT_NAME}: failed to set IPMI alert dest." 1>&2 ;;
|
||||||
|
9) eval_gettext "${SCRIPT_NAME}: no free IPMI alert dest." 1>&2 ;;
|
||||||
|
10) eval_gettext "${SCRIPT_NAME}: failed to set IPMI PEF." 1>&2 ;;
|
||||||
|
11) eval_gettext "${SCRIPT_NAME}: failed to write snmptrapd.conf." 1>&2 ;;
|
||||||
|
12) eval_gettext "${SCRIPT_NAME}: snmpd not found." 1>&2 ;;
|
||||||
|
*) eval_gettext "${SCRIPT_NAME}: unknown error." 1>&2 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ ${RETVAL} -gt 1 ]; then
|
||||||
|
eval_gettext " Return code: ${RETVAL}"; echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
|
#############################################################################
|
||||||
|
# end of file
|
||||||
|
#############################################################################
|
18
contrib/bmc-snmp-proxy.service
Normal file
18
contrib/bmc-snmp-proxy.service
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Setup SNMP proxy to BMC
|
||||||
|
|
||||||
|
After=exchange-bmc-os-info.service
|
||||||
|
Requires=exchange-bmc-os-info.service
|
||||||
|
PartOf=exchange-bmc-os-info.service
|
||||||
|
|
||||||
|
ConditionPathExists=/run/bmc-info
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
ExecStart=/usr/libexec/bmc-snmp-proxy start
|
||||||
|
ExecStop=/usr/libexec/bmc-snmp-proxy stop
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
48
contrib/bmc-snmp-proxy.sysconf
Normal file
48
contrib/bmc-snmp-proxy.sysconf
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# bmc-snmp-proxy
|
||||||
|
#
|
||||||
|
# Config file to control SNMP redirection between
|
||||||
|
# the OS and Service Processor/Baseboard Management Controller (BMC)
|
||||||
|
#
|
||||||
|
# bmc-snnmp-proxy helps redirect certain SNMP requests (to this host)
|
||||||
|
# destined to the Service Processor. We will need the Service Processor's
|
||||||
|
# SNMP community string and the OID of the Service Processor's SNMP agent.
|
||||||
|
#
|
||||||
|
# For redirecting Traps from the Service Processor to the trap sink
|
||||||
|
# configured in the host (this system), we will have to set
|
||||||
|
# TRAP_FORWARD below.
|
||||||
|
#
|
||||||
|
# See here for details
|
||||||
|
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
||||||
|
|
||||||
|
### Configure SNMP proxy to BMC/Service Processor ###
|
||||||
|
|
||||||
|
### Service Processor/BMC SNMP Community String.
|
||||||
|
# Name: BMC_COMMUNITY
|
||||||
|
# Description: Set community string of the Service Processor (BMC)'s
|
||||||
|
# SNMP agent.
|
||||||
|
# Default: public
|
||||||
|
#
|
||||||
|
BMC_COMMUNITY="public"
|
||||||
|
|
||||||
|
### OEM Specific OID of Service Processor
|
||||||
|
# Name: BMC_OID
|
||||||
|
# Description: SNMP OID that we would like to redirect to the Service
|
||||||
|
# Processor (BMC). This can be unique to each OEM.
|
||||||
|
# Default: ".1.3.6.1.4.1.674.10892.2"
|
||||||
|
BMC_OID=".1.3.6.1.4.1.674.10892.2" # Dell iDRAC
|
||||||
|
|
||||||
|
### Forward Traps from the Service Processor to trap sink
|
||||||
|
# Name: TRAP_FORWARD
|
||||||
|
# Description: Enabling this will allow traps from the Service Processor
|
||||||
|
# to be directed to this system and configure snmptrapd
|
||||||
|
# Note: This option will have no effect if trap sink on the system is
|
||||||
|
# not configured
|
||||||
|
# Default: "no"
|
||||||
|
TRAP_FORWARD="yes"
|
||||||
|
|
||||||
|
### Reload snmpd and snmptrapd
|
||||||
|
# Name: RELOAD_SERVICES
|
||||||
|
# Description: Reload snmpd and snmptrapd after making changes to their config
|
||||||
|
# files.
|
||||||
|
# Default: "yes"
|
||||||
|
RELOAD_SERVICES="yes"
|
326
contrib/exchange-bmc-os-info.init.redhat
Normal file
326
contrib/exchange-bmc-os-info.init.redhat
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# exchange-bmc-os-info: Set OS and BMC (Baseboard Management Controller)
|
||||||
|
# parameters during system startup.
|
||||||
|
#
|
||||||
|
# version: 0.72
|
||||||
|
#
|
||||||
|
# Authors: Charles Rose <charles_rose@dell.com>
|
||||||
|
# Jordan Hargrave <jordan_hargrave@dell.com>
|
||||||
|
#
|
||||||
|
# Description: Script to set OS information in the BMC; fetch BMC IP/URL
|
||||||
|
# and set in the OS for use by other scripts/user.
|
||||||
|
#
|
||||||
|
# BMC IP and URL are made available in /run/bmc-info
|
||||||
|
#
|
||||||
|
# Example to launch BMC web-interface:
|
||||||
|
# # . /run/bmc-info
|
||||||
|
# # xdg-open $BMC_URL
|
||||||
|
#
|
||||||
|
# See here for details:
|
||||||
|
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
||||||
|
#
|
||||||
|
# OEM Specific: OEM specific ipmi commands go in:
|
||||||
|
# 'oem_set_os_version' and 'oem_get_bmc_url'
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# chkconfig: 345 99 00
|
||||||
|
# description: Set OS name, hostname in BMC; make BMC IP/URL available in OS
|
||||||
|
# processname: exchange-bmc-os-info
|
||||||
|
# config: /etc/sysconfig/exchange-bmc-os-info
|
||||||
|
#
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: exchange-bmc-os-info
|
||||||
|
# Required-Start: ipmi
|
||||||
|
# Default-Start: 3 4 5
|
||||||
|
# Default-Stop: 0 1 2 6
|
||||||
|
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# GLOBALS
|
||||||
|
#############################################################################
|
||||||
|
CONFIGFILE=/etc/sysconfig/exchange-bmc-os-info
|
||||||
|
IPMI_TOOL=/usr/bin/ipmitool
|
||||||
|
BMC_INFO=/run/bmc-info
|
||||||
|
|
||||||
|
# BMC Manufacturer ID used in 'oem_set_os_version' and 'oem_get_bmc_url'
|
||||||
|
DELL="674"
|
||||||
|
#OTHER_OEM="123"
|
||||||
|
|
||||||
|
# Defaults for ${CONFIGFILE}
|
||||||
|
SET_OS_INFO="yes"
|
||||||
|
RESET_OS_INFO="no"
|
||||||
|
SET_BMC_INFO="yes"
|
||||||
|
|
||||||
|
# getsysinfo and setsysinfo commands
|
||||||
|
IPMI_SET_SYSINFO="${IPMI_TOOL} mc setsysinfo"
|
||||||
|
IPMI_GET_SYSINFO="${IPMI_TOOL} mc getsysinfo"
|
||||||
|
#############################################################################
|
||||||
|
SCRIPT_NAME=$(basename $0)
|
||||||
|
|
||||||
|
# source config
|
||||||
|
[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
|
||||||
|
|
||||||
|
RETVAL=0
|
||||||
|
|
||||||
|
if [ -f /bin/gettext.sh ]; then
|
||||||
|
GETTEXT=1
|
||||||
|
. /bin/gettext.sh
|
||||||
|
OUTPUT="eval_gettext"
|
||||||
|
else
|
||||||
|
GETTEXT=0
|
||||||
|
OUTPUT="echo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# Get Vendor ID of BMC for use in 'oem_set_os_version' and 'oem_get_bmc_url'
|
||||||
|
#
|
||||||
|
get_bmc_vendor_id()
|
||||||
|
{
|
||||||
|
BMC_VENDOR=$(${IPMI_TOOL} mc info 2>/dev/null | \
|
||||||
|
sed -n "s#^Manufacturer ID.*: ##p")
|
||||||
|
[ -z "${BMC_VENDOR}" ] && RETVAL=4
|
||||||
|
}
|
||||||
|
|
||||||
|
check_ipmitool()
|
||||||
|
{
|
||||||
|
if [ -x ${IPMI_TOOL} ]; then
|
||||||
|
# v1.8.12 plus patches are required for set/getsysinfo support
|
||||||
|
# http://sourceforge.net/mailarchive/message.php?msg_id=29647222
|
||||||
|
[ ! ${IPMI_GET_SYSINFO} >/dev/null 2>&1 ] && \
|
||||||
|
RETVAL=3
|
||||||
|
else
|
||||||
|
RETVAL=2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
bmc_exists()
|
||||||
|
{
|
||||||
|
check_ipmitool
|
||||||
|
[ $RETVAL -eq 0 ] && get_bmc_vendor_id
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
get_os_info()
|
||||||
|
{
|
||||||
|
OS_HOSTNAME=$(hostname)
|
||||||
|
KERNEL_VERSION=$(uname -r -m)
|
||||||
|
|
||||||
|
if [ -e /etc/lsb-release ] ; then
|
||||||
|
. /etc/lsb-release
|
||||||
|
NAME=${DISTRIB_ID}
|
||||||
|
VERSION="${DISTRIB_RELEASE} ${DISTRIB_CODENAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# we prefer systemd's /etc/os-release over other sources
|
||||||
|
[ -e /etc/os-release ] && . /etc/os-release
|
||||||
|
|
||||||
|
OS_NAME=${NAME}
|
||||||
|
OS_VERSION="${VERSION} kernel ${KERNEL_VERSION}"
|
||||||
|
}
|
||||||
|
|
||||||
|
oem_set_os_version()
|
||||||
|
{
|
||||||
|
# OS Version setting is not standard yet
|
||||||
|
# we need per vendor oem commands
|
||||||
|
case "${BMC_VENDOR}" in
|
||||||
|
$DELL) ${IPMI_SET_SYSINFO} delloem_os_version \
|
||||||
|
"${OS_VERSION}" > /dev/null 2>&1
|
||||||
|
return $?
|
||||||
|
;;
|
||||||
|
# Add OEM specific commands.
|
||||||
|
# Example:
|
||||||
|
# $OTHER_OEM) ${IPMI_SET_SYSINFO} otheroem_os_version \
|
||||||
|
# "${OS_VERSION}" > /dev/null 2>&1
|
||||||
|
# return $?
|
||||||
|
# ;;
|
||||||
|
*) return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
set_os_info()
|
||||||
|
{
|
||||||
|
# Set and reset OS info in the BMC
|
||||||
|
if [ "$1" = "reset" ]; then
|
||||||
|
OS_NAME=""
|
||||||
|
OS_HOSTNAME=""
|
||||||
|
OS_VERSION=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
${IPMI_SET_SYSINFO} os_name "${OS_NAME}" >/dev/null 2>&1 \
|
||||||
|
|| RETVAL=6
|
||||||
|
${IPMI_SET_SYSINFO} primary_os_name "${OS_NAME}" >/dev/null 2>&1 \
|
||||||
|
|| RETVAL=6
|
||||||
|
${IPMI_SET_SYSINFO} system_name "${OS_HOSTNAME}" >/dev/null 2>&1 \
|
||||||
|
|| RETVAL=6
|
||||||
|
oem_set_os_version || RETVAL=6
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
valid_url()
|
||||||
|
{
|
||||||
|
url="(https?|http)://[a-z0-9-]+(\.[a-z0-9-]+)+([/?].*)?"
|
||||||
|
printf -- "%s" "${TMP_URL}"| grep -Eq "^${url}"
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
oem_get_bmc_url()
|
||||||
|
{
|
||||||
|
# BMC URL is not standard yet
|
||||||
|
# we need per vendor oem commands
|
||||||
|
case "$BMC_VENDOR" in
|
||||||
|
$DELL) TMP_URL=$(${IPMI_GET_SYSINFO} delloem_url 2> /dev/null)
|
||||||
|
;;
|
||||||
|
# Add OEM specific commands
|
||||||
|
# Example:
|
||||||
|
# $OTHER_OEM)
|
||||||
|
# TMP_URL=$(${IPMI_GET_SYSINFO} otheroem_url 2> /dev/null)
|
||||||
|
# ;;
|
||||||
|
*) TMP_URL="" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
valid_url && BMC_URL=${TMP_URL} || BMC_URL=""
|
||||||
|
}
|
||||||
|
|
||||||
|
valid_ip()
|
||||||
|
{
|
||||||
|
#Thanks to mkyong.com
|
||||||
|
octet="([01]?[[:digit:]][[:digit:]]?|2[0-4][[:digit:]]|25[0-5])"
|
||||||
|
|
||||||
|
printf -- "%s" "${TMP_IPv4}"| grep -Eq "^${octet}\\.${octet}\\.${octet}\\.${octet}$"
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
get_bmc_ip()
|
||||||
|
{
|
||||||
|
#Thanks to http://ingvar.blog.redpill-linpro.com
|
||||||
|
for CHANNEL in `seq 1 14`
|
||||||
|
do
|
||||||
|
[ $(${IPMI_TOOL} lan print ${CHANNEL} 2>/dev/null \
|
||||||
|
| grep -q "^Set") ] || break
|
||||||
|
done
|
||||||
|
|
||||||
|
# Get BMC_IPv4 and BMC_URL from BMC
|
||||||
|
TMP_IPv4=$(${IPMI_TOOL} lan print ${CHANNEL} 2>/dev/null \
|
||||||
|
| sed -n "s#^IP Address .*: ##p")
|
||||||
|
|
||||||
|
valid_ip && BMC_IPv4=${TMP_IPv4} || BMC_IPv4=""
|
||||||
|
}
|
||||||
|
|
||||||
|
get_bmc_info()
|
||||||
|
{
|
||||||
|
get_bmc_ip
|
||||||
|
if [ -z "${BMC_IPv4}" ] || [ "${BMC_IPv4}" = "0.0.0.0" ]; then
|
||||||
|
BMC_IPv4=""
|
||||||
|
RETVAL=5
|
||||||
|
else
|
||||||
|
# URL makes sense only if there is an IP
|
||||||
|
oem_get_bmc_url
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_bmc_info()
|
||||||
|
{
|
||||||
|
if [ ! $(touch "${BMC_INFO}" && chmod 600 "${BMC_INFO}") ]; then
|
||||||
|
printf "BMC_IPv4=%s\n" "${BMC_IPv4}" > "${BMC_INFO}"
|
||||||
|
[ -n "${BMC_URL}" ] && \
|
||||||
|
printf "BMC_URL=%s\n" "${BMC_URL}" >> "${BMC_INFO}"
|
||||||
|
else
|
||||||
|
RETVAL=5
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
unset_bmc_info()
|
||||||
|
{
|
||||||
|
[ -f ${BMC_INFO} ] && rm -f ${BMC_INFO} > /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
start()
|
||||||
|
{
|
||||||
|
if bmc_exists; then
|
||||||
|
[ "${SET_OS_INFO}" = "yes" ] && \
|
||||||
|
get_os_info && set_os_info
|
||||||
|
|
||||||
|
if [ "${SET_BMC_INFO}" = "yes" ]; then
|
||||||
|
get_bmc_info
|
||||||
|
if [ ${RETVAL} -eq 0 ]; then
|
||||||
|
set_bmc_info
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
stop()
|
||||||
|
{
|
||||||
|
if bmc_exists; then
|
||||||
|
# reset OS info while system reboots
|
||||||
|
# aids with debugging OS boot-up issues
|
||||||
|
if [ "${RESET_OS_INFO}" = "yes" ]; then
|
||||||
|
set_os_info reset
|
||||||
|
fi
|
||||||
|
unset_bmc_info
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
restart()
|
||||||
|
{
|
||||||
|
stop
|
||||||
|
[ $RETVAL -eq 0 ] && start
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
status()
|
||||||
|
{
|
||||||
|
[ -r ${BMC_INFO} ] && \
|
||||||
|
grep -q "BMC_IPv4" "${BMC_INFO}" >/dev/null 1>&2 && \
|
||||||
|
BMC_STATUS="ok" || BMC_STATUS="inactive"
|
||||||
|
${OUTPUT} "${SCRIPT_NAME}: ${BMC_STATUS}" 1>&2
|
||||||
|
[ ${GETTEXT} -eq 1 ] && echo
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
${OUTPUT} "Usage: ${SCRIPT_NAME} {start|stop|restart|status}" 1>&2
|
||||||
|
[ ${GETTEXT} -eq 1 ] && echo
|
||||||
|
RETVAL=1
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# MAIN
|
||||||
|
#############################################################################
|
||||||
|
case "$1" in
|
||||||
|
start) start ;;
|
||||||
|
stop) stop ;;
|
||||||
|
restart) restart ;;
|
||||||
|
status) status ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$RETVAL" in
|
||||||
|
0|1) ;;
|
||||||
|
2) ${OUTPUT} "${SCRIPT_NAME}: ipmitool(1) not found." 1>&2 ;;
|
||||||
|
3) ${OUTPUT} "${SCRIPT_NAME}: this version of ipmitool does not support getsysinfo." 1>&2 ;;
|
||||||
|
4) ${OUTPUT} "${SCRIPT_NAME}: failed to communicate with BMC." 1>&2 ;;
|
||||||
|
5) ${OUTPUT} "${SCRIPT_NAME}: failed to set OS information in BMC." 1>&2 ;;
|
||||||
|
6) ${OUTPUT} "${SCRIPT_NAME}: failed to get BMC information." 1>&2 ;;
|
||||||
|
*) ${OUTPUT} "${SCRIPT_NAME}: unexpected error." 1>&2 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ ${RETVAL} -gt 1 ]; then
|
||||||
|
${OUTPUT} " Return code: ${RETVAL}" 1>&2
|
||||||
|
[ ${GETTEXT} -eq 1 ] && echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# end of file
|
||||||
|
#############################################################################
|
14
contrib/exchange-bmc-os-info.service.redhat
Normal file
14
contrib/exchange-bmc-os-info.service.redhat
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Exchange Information between BMC and OS
|
||||||
|
After=network.target
|
||||||
|
AssertFileIsExecutable=/usr/bin/ipmitool
|
||||||
|
AssertPathExistsGlob=/dev/ipmi*
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/libexec/exchange-bmc-os-info start
|
||||||
|
ExecStop=/usr/libexec/exchange-bmc-os-info stop
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
26
contrib/exchange-bmc-os-info.sysconf
Normal file
26
contrib/exchange-bmc-os-info.sysconf
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# exchange-bmc-os-info
|
||||||
|
#
|
||||||
|
# Config file to control Exchange of information between
|
||||||
|
# the OS and Service Processor/Baseboard Management Controller (BMC)
|
||||||
|
#
|
||||||
|
# See here for details
|
||||||
|
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
||||||
|
|
||||||
|
### Set OS Info in BMC/Service Processor ###
|
||||||
|
# Name: SET_OS_INFO
|
||||||
|
# Description: Set OS Name, Version and Hostname in the Service Processor (BMC)
|
||||||
|
# Default: yes
|
||||||
|
SET_OS_INFO="yes"
|
||||||
|
|
||||||
|
### Reset OS Info in BMC/Service Processor ###
|
||||||
|
# Name: RESET_OS_INFO
|
||||||
|
# Description: Reset OS Name, Version and Hostname in the Service Processor (BMC).
|
||||||
|
# Useful when the OS Name/Hostname should be empty on reboot
|
||||||
|
# Default: no
|
||||||
|
RESET_OS_INFO="no"
|
||||||
|
|
||||||
|
### Set BMC/Service Processor Info in OS ###
|
||||||
|
# Name; SET_BMC_INFO
|
||||||
|
# Description: Set IP Address and URL of Service Processor/BMC in /run/bmc-info
|
||||||
|
# Default: yes
|
||||||
|
SET_BMC_INFO="yes"
|
@ -5,7 +5,7 @@ echo "Setting up OpenIPMI driver..."
|
|||||||
# load the ipmi modules
|
# load the ipmi modules
|
||||||
modprobe ipmi_msghandler
|
modprobe ipmi_msghandler
|
||||||
modprobe ipmi_devintf
|
modprobe ipmi_devintf
|
||||||
if ! modprobe ipmi_kcs_drv ; then
|
if ! modprobe ipmi_si_drv ; then
|
||||||
modprobe ipmi_si # try new module name
|
modprobe ipmi_si # try new module name
|
||||||
fi
|
fi
|
||||||
|
|
@ -38,7 +38,7 @@ start() {
|
|||||||
# module if that fails.
|
# module if that fails.
|
||||||
if ! /sbin/modprobe ipmi_si >/dev/null 2>&1
|
if ! /sbin/modprobe ipmi_si >/dev/null 2>&1
|
||||||
then
|
then
|
||||||
/sbin/modprobe ipmi_kcs_drv || RETVAL=1
|
/sbin/modprobe ipmi_si_drv || RETVAL=1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -173,7 +173,7 @@ remove () {
|
|||||||
then
|
then
|
||||||
# Try removing both 2.4 and 2.6 modules.
|
# Try removing both 2.4 and 2.6 modules.
|
||||||
/sbin/rmmod ipmi_si 2>/dev/null
|
/sbin/rmmod ipmi_si 2>/dev/null
|
||||||
/sbin/rmmod ipmi_kcs_drv 2>/dev/null
|
/sbin/rmmod ipmi_si_drv 2>/dev/null
|
||||||
/sbin/rmmod ipmi_devintf
|
/sbin/rmmod ipmi_devintf
|
||||||
/sbin/rmmod ipmi_msghandler
|
/sbin/rmmod ipmi_msghandler
|
||||||
else
|
else
|
@ -22,7 +22,7 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
|||||||
DESC="IPMI event daemon"
|
DESC="IPMI event daemon"
|
||||||
NAME=ipmievd
|
NAME=ipmievd
|
||||||
DAEMON=/usr/sbin/$NAME
|
DAEMON=/usr/sbin/$NAME
|
||||||
PIDFILE=/var/run/$NAME.pid
|
PIDFILE=/run/$NAME.pid
|
||||||
SCRIPTNAME=/etc/init.d/$NAME
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
|
||||||
# Gracefully exit if the package has been removed.
|
# Gracefully exit if the package has been removed.
|
88
contrib/log_bmc.sh
Normal file
88
contrib/log_bmc.sh
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# log_bmc.sh: Add SEL entries to indicate OS Boot/Install status.
|
||||||
|
#
|
||||||
|
# version: 0.1
|
||||||
|
#
|
||||||
|
# Authors: Charles Rose <charles_rose@dell.com>
|
||||||
|
# Jordan Hargrave <jordan_hargrave@dell.com>
|
||||||
|
#
|
||||||
|
# Description: Script to log OS boot/install status to the BMC. Primarily
|
||||||
|
# meant for use in automated installs and start up scripts.
|
||||||
|
# Will provide administrators with OS boot/install status in
|
||||||
|
# BMC and aid with debugging.
|
||||||
|
#
|
||||||
|
# Example usage:
|
||||||
|
# # ./log_bmc.sh inst_start
|
||||||
|
# # ipmitool sel list
|
||||||
|
# b | 05/07/2014 | 12:07:32 | OS Boot | Installation started
|
||||||
|
#
|
||||||
|
# See here for details:
|
||||||
|
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
IPMI_CMD="/usr/bin/ipmitool"
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# SEL Event types from ipmi_sel.h
|
||||||
|
OS_STOP="0x20"
|
||||||
|
OS_BOOT="0x1f"
|
||||||
|
# SEL Event data from ipmi_sel.h
|
||||||
|
GRACEFUL_SHUTDOWN="0x03" # OS Stop/Shutdown: Installation started
|
||||||
|
BOOT_COMPLETED="0x01" # OS Boot: Installation started
|
||||||
|
INSTALL_STARTED="0x07" # OS Boot: Installation started
|
||||||
|
INSTALL_COMPLETED="0x08" # OS Boot: Installation completed
|
||||||
|
INSTALL_ABORTED="0x09" # OS Boot: Installation aborted
|
||||||
|
INSTALL_FAILED="0x0a" # OS Boot: Installation failed
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
# check for ipmi functionality.
|
||||||
|
check_ipmi()
|
||||||
|
{
|
||||||
|
# ensures presence of ipmitool and /dev/ipmi*
|
||||||
|
${IPMI_CMD} mc info > /dev/null 2>&1
|
||||||
|
[ $? -ne 0 ] && RETVAL=2
|
||||||
|
}
|
||||||
|
|
||||||
|
# Write out the events to SEL
|
||||||
|
ipmi_sel_add()
|
||||||
|
{
|
||||||
|
# Refer ipmitool(1) event for details on format.
|
||||||
|
printf "0x04 %s 0x00 0x6f %s 0x00 0x00" ${type} ${status} > \
|
||||||
|
${tmpfile} && \
|
||||||
|
${IPMI_CMD} sel add ${tmpfile} > /dev/null 2>&1
|
||||||
|
[ $? -ne 0 ] && RETVAL=3
|
||||||
|
}
|
||||||
|
|
||||||
|
### Main
|
||||||
|
# Most of the status is for this event type
|
||||||
|
tmpfile=$(/usr/bin/mktemp)
|
||||||
|
RETVAL=0
|
||||||
|
type=${OS_BOOT}
|
||||||
|
|
||||||
|
case ${1} in
|
||||||
|
os_shutdown) type=${OS_STOP}; status=${GRACEFUL_SHUTDOWN} ;;
|
||||||
|
os_boot) status=${BOOT_COMPLETED} ;;
|
||||||
|
inst_start) status=${INSTALL_STARTED} ;;
|
||||||
|
inst_complete) status=${INSTALL_COMPLETED} ;;
|
||||||
|
inst_abort) status=${INSTALL_ABORTED} ;;
|
||||||
|
inst_fail) status=${INSTALL_FAILED} ;;
|
||||||
|
*) RETVAL=1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ ${RETVAL} -eq 0 ] && check_ipmi
|
||||||
|
[ ${RETVAL} -eq 0 ] && ipmi_sel_add ${status}
|
||||||
|
|
||||||
|
case ${RETVAL} in
|
||||||
|
0) ;;
|
||||||
|
1) printf -- %s\\n "Usage: $0 <os_boot|os_shutdown|inst_start|inst_complete|inst_abort|inst_fail>" ;;
|
||||||
|
2) printf -- %s\\n "failed to communicate with BMC." ;;
|
||||||
|
3) printf -- %s\\n "error adding ipmi sel entry." ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ -f ${tmpfile} ] && rm -f ${tmpfile} > /dev/null 2>&1
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
|
### End
|
@ -1,3 +1,5 @@
|
|||||||
|
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x01","0x00","Chassis Number","R","R","0x00","CPU shutdown - Potential cause 'triple fault' a software address problem"
|
||||||
|
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x01","Chassis Number","Failed Memory Card","Spare Memory Card","0x00","Memory Mirrored Failover Occurred - System running from mirrored memory image"
|
||||||
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x04","Chassis Number","Memory Card","Completion Code (0x00=Success)","0x00","Memory hot replace event"
|
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x04","Chassis Number","Memory Card","Completion Code (0x00=Success)","0x00","Memory hot replace event"
|
||||||
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x05","Chassis Number","Memory Card","Memory Size (in 512MB units)","0x00","Memory hot add event"
|
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x05","Chassis Number","Memory Card","Memory Size (in 512MB units)","0x00","Memory hot add event"
|
||||||
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x00","Chassis Number","Scalability Port Number","R","0x00","Scalability link down"
|
"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x00","Chassis Number","Scalability Port Number","R","0x00","Scalability link down"
|
||||||
@ -19,14 +21,9 @@
|
|||||||
"0xE0","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","PCI device has an invalid PCI configuration space header"
|
"0xE0","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","PCI device has an invalid PCI configuration space header"
|
||||||
"0xE0","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for added PCI device"
|
"0xE0","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for added PCI device"
|
||||||
"0xE0","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for removed PCI device"
|
"0xE0","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for removed PCI device"
|
||||||
"0xE0","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was added, PCI FRU information is stored in next log entry"
|
"0xE0","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was removed, PCI FRU information is stored in next log entry"
|
||||||
"0xE0","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was removed, PCI FRU information is stored in next log entry"
|
"0xE0","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was added, PCI FRU information is stored in next log entry"
|
||||||
"0xE0","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Requested resources not available"
|
"0xE0","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Requested resources not available"
|
||||||
"0xE0","0x00","0x0E","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x0F","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x10","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x11","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x12","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Planar video disabled due to add in video card"
|
"0xE0","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Planar video disabled due to add in video card"
|
||||||
"0xE0","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for PCI device partially disabled "
|
"0xE0","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for PCI device partially disabled "
|
||||||
"0xE0","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was partially disabled, PCI FRU information is stored in next log entry"
|
"0xE0","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was partially disabled, PCI FRU information is stored in next log entry"
|
||||||
@ -54,11 +51,6 @@
|
|||||||
"0xE0","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was added, PCI FRU information is stored in next log entry"
|
"0xE0","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was added, PCI FRU information is stored in next log entry"
|
||||||
"0xE0","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was removed, PCI FRU information is stored in next log entry"
|
"0xE0","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was removed, PCI FRU information is stored in next log entry"
|
||||||
"0xE0","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Requested resources not available"
|
"0xE0","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Requested resources not available"
|
||||||
"0xE0","0x00","0x0E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x0F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x10","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x11","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x12","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required I/O Space Not Available"
|
|
||||||
"0xE0","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Planar video disabled due to add in video card"
|
"0xE0","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Planar video disabled due to add in video card"
|
||||||
"0xE0","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","FRU information for PCI device partially disabled "
|
"0xE0","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","FRU information for PCI device partially disabled "
|
||||||
"0xE0","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was partially disabled, PCI FRU information is stored in next log entry"
|
"0xE0","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was partially disabled, PCI FRU information is stored in next log entry"
|
||||||
@ -76,20 +68,23 @@
|
|||||||
"0xE0","0x01","0x01","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","Unable to apply processor microcode update"
|
"0xE0","0x01","0x01","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","Unable to apply processor microcode update"
|
||||||
"0xE0","0x01","0x02","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","POST does not support current stepping level of processor"
|
"0xE0","0x01","0x02","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","POST does not support current stepping level of processor"
|
||||||
"0xE0","0x01","0x03","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","CPU mismatch detected"
|
"0xE0","0x01","0x03","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","CPU mismatch detected"
|
||||||
|
"0xE0","0x01","0x04","Chassis Number","R","R","R","R","R","R","R","R","R","0x00","Invalid configuration of processor card."
|
||||||
"0xE0","0x02","0x00","Chassis Number","Memory Card","Memory DIMM","R","R","R","R","R","R","R","0x00","Uncorrectable memory error occurred"
|
"0xE0","0x02","0x00","Chassis Number","Memory Card","Memory DIMM","R","R","R","R","R","R","R","0x00","Uncorrectable memory error occurred"
|
||||||
"0xE0","0x02","0x01","Chassis Number","Memory Card","Memory DIMM","Failing Symbol","R","R","R","R","R","R","0x00","Correctable memory threshold occurred"
|
"0xE0","0x02","0x01","Chassis Number","Memory Card","Memory DIMM","Failing Symbol","R","R","R","R","R","R","0x00","Correctable memory threshold occurred"
|
||||||
"0xE0","0x02","0x02","0x00","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM enabled"
|
"0xE0","0x02","0x02","0x00","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM enabled"
|
||||||
"0xE0","0x02","0x02 ","0x01","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, failed ECC test"
|
"0xE0","0x02","0x02","0x01","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, failed ECC test"
|
||||||
"0xE0","0x02","0x02 ","0x02","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, failed POST/BIOS memory test"
|
"0xE0","0x02","0x02","0x02","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, failed POST/BIOS memory test"
|
||||||
"0xE0","0x02","0x02 ","0x03","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, non-supported memory device"
|
"0xE0","0x02","0x02","0x03","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, non-supported memory device"
|
||||||
"0xE0","0x02","0x02 ","0x04","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, non-matching or missing DIMM(s)"
|
"0xE0","0x02","0x02","0x04","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, non-matching or missing DIMM(s)"
|
||||||
"0xE0","0x03","0x00","Chassis Number","Memory Card","R","R","R","R","R","R","R","R","0x00","Memory card enabled"
|
"0xE0","0x02","0x03","0x00","Chassis Number","Memory Card","R","R","R","R","R","R","R","0x00","Memory card enabled"
|
||||||
"0xE0","0x03","0x00","Chassis Number","Memory Card","R","R","R","R","R","R","R","R","0x00","Memory card disabled"
|
"0xE0","0x02","0x03","0x01","Chassis Number","Memory Card","R","R","R","R","R","R","R","0x00","Memory card disabled"
|
||||||
"0xE0","0x02","0x00","0x00","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM enabled"
|
"0xE0","0x02","0x00","0x00","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM enabled"
|
||||||
"0xE0","0x02","0x00","0x01","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, failed ECC test"
|
"0xE0","0x02","0x00","0x01","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, failed ECC test"
|
||||||
"0xE0","0x02","0x00","0x02","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, failed POST/BIOS memory test"
|
"0xE0","0x02","0x00","0x02","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, failed POST/BIOS memory test"
|
||||||
"0xE0","0x02","0x00","0x03","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, non-supported memory device"
|
"0xE0","0x02","0x00","0x03","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, non-supported memory device"
|
||||||
"0xE0","0x02","0x00","0x04","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, non-matching or missing DIMM(s)"
|
"0xE0","0x02","0x00","0x04","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, non-matching or missing DIMM(s)"
|
||||||
|
"0xE0","0x02","0x00","0x05","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, multi-bit or multi-symbol error"
|
||||||
|
"0xE0","0x02","0x01","0x00","Chassis","Failed Channel","R","R","R","R","R","R","R","0x01","AMB Failure Detected on Channel X During Last Boot"
|
||||||
"0xE1","0x00","0x00","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","Unknown SERR/PERR detected on PCI bus"
|
"0xE1","0x00","0x00","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","Unknown SERR/PERR detected on PCI bus"
|
||||||
"0xE1","0x00","0x01","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Address of special cycle DPE"
|
"0xE1","0x00","0x01","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Address of special cycle DPE"
|
||||||
"0xE1","0x00","0x02","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Master read parity error"
|
"0xE1","0x00","0x02","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Master read parity error"
|
||||||
@ -98,11 +93,11 @@
|
|||||||
"0xE1","0x00","0x05","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Device signaled SERR"
|
"0xE1","0x00","0x05","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Device signaled SERR"
|
||||||
"0xE1","0x00","0x06","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Slave signaled parity error"
|
"0xE1","0x00","0x06","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Slave signaled parity error"
|
||||||
"0xE1","0x00","0x07","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Signaled Target Abort"
|
"0xE1","0x00","0x07","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Signaled Target Abort"
|
||||||
"0xE1","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Additional Correctable ECC Error"
|
"0xE1","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: Additional Correctable ECC Error"
|
||||||
"0xE1","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received Master Abort"
|
"0xE1","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received Master Abort"
|
||||||
"0xE1","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Additional Uncorrectable ECC Error"
|
"0xE1","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Additional Uncorrectable ECC Error"
|
||||||
"0xE1","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Split Completion Discarded"
|
"0xE1","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Split Completion Discarded"
|
||||||
"0xE1","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Correctable ECC Error"
|
"0xE1","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: Correctable ECC Error"
|
||||||
"0xE1","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Unexpected Split Completion"
|
"0xE1","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Unexpected Split Completion"
|
||||||
"0xE1","0x00","0x0E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Uncorrectable ECC Error"
|
"0xE1","0x00","0x0E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Uncorrectable ECC Error"
|
||||||
"0xE1","0x00","0x0F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received split completion error"
|
"0xE1","0x00","0x0F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received split completion error"
|
||||||
@ -113,15 +108,15 @@
|
|||||||
"0xE1","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Device Signaled SERR"
|
"0xE1","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Device Signaled SERR"
|
||||||
"0xE1","0x00","0x16","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Slave Signaled Parity Error"
|
"0xE1","0x00","0x16","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Slave Signaled Parity Error"
|
||||||
"0xE1","0x00","0x17","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Signaled Target Abort"
|
"0xE1","0x00","0x17","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Signaled Target Abort"
|
||||||
"0xE1","0x00","0x18","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Additional Correctable ECC Error"
|
"0xE1","0x00","0x18","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: PCI-PCI bridge secondary error: Additional Correctable ECC Error"
|
||||||
"0xE1","0x00","0x19","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received Master Abort"
|
"0xE1","0x00","0x19","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received Master Abort"
|
||||||
"0xE1","0x00","0x1A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Additional Uncorrectable ECC Error"
|
"0xE1","0x00","0x1A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Additional Uncorrectable ECC Error"
|
||||||
"0xE1","0x00","0x1B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Split Completion Discarded"
|
"0xE1","0x00","0x1B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Split Completion Discarded"
|
||||||
"0xE1","0x00","0x1C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Correctable ECC Error"
|
"0xE1","0x00","0x1C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: PCI-PCI bridge secondary error: Correctable ECC Error"
|
||||||
"0xE1","0x00","0x1D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Unexpected Split Completion"
|
"0xE1","0x00","0x1D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Unexpected Split Completion"
|
||||||
"0xE1","0x00","0x1E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Uncorrectable ECC Error"
|
"0xE1","0x00","0x1E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Uncorrectable ECC Error"
|
||||||
"0xE1","0x00","0x1F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received split completion error"
|
"0xE1","0x00","0x1F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received split completion error"
|
||||||
"0xE1","0x00","0x20","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI ECC Error (Corrected)"
|
"0xE1","0x00","0x20","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: PCI ECC Error (Corrected)"
|
||||||
"0xE1","0x00","0x21","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI Bus Address Parity Error"
|
"0xE1","0x00","0x21","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI Bus Address Parity Error"
|
||||||
"0xE1","0x00","0x22","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI Bus Data Parity Error"
|
"0xE1","0x00","0x22","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI Bus Data Parity Error"
|
||||||
"0xE1","0x00","0x23","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: SERR# Asserted"
|
"0xE1","0x00","0x23","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: SERR# Asserted"
|
||||||
@ -182,6 +177,8 @@
|
|||||||
"0xE1","0x02","0x00","0x01","Failed Row 1","Failed Row 2","Spare Row 1","Spare Row 2","R","R","R","R","R","0x00","Memory sparing event, start 2"
|
"0xE1","0x02","0x00","0x01","Failed Row 1","Failed Row 2","Spare Row 1","Spare Row 2","R","R","R","R","R","0x00","Memory sparing event, start 2"
|
||||||
"0xE1","0x02","0x00","0x03","Failed Row 1","Failed Row 2","Spare Row 1","Spare Row 2","R","R","R","R","R","0x00","Memory sparing event, done 2"
|
"0xE1","0x02","0x00","0x03","Failed Row 1","Failed Row 2","Spare Row 1","Spare Row 2","R","R","R","R","R","0x00","Memory sparing event, done 2"
|
||||||
"0xE1","0x02","0x01","Failed Port","Spare Port","R","R","R","R","R","R","R","R","0x00","Memory mirroring failover occurred"
|
"0xE1","0x02","0x01","Failed Port","Spare Port","R","R","R","R","R","R","R","R","0x00","Memory mirroring failover occurred"
|
||||||
|
"0xE1","0x02","0x00","0x00","R","R","R","R","R","R","R","R","R","0x01","Memory sparing event, start 1"
|
||||||
|
"0xE1","0x02","0x00","0x02","R","R","R","R","R","R","R","R","R","0x01","Memory sparing event, done 1"
|
||||||
"0xE1","0x04","0x00","0x00","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB A Fatal"
|
"0xE1","0x04","0x00","0x00","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB A Fatal"
|
||||||
"0xE1","0x04","0x00","0x01","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB A Nonfatal"
|
"0xE1","0x04","0x00","0x01","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB A Nonfatal"
|
||||||
"0xE1","0x04","0x00","0x02","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB B Fatal"
|
"0xE1","0x04","0x00","0x02","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB B Fatal"
|
||||||
@ -190,7 +187,9 @@
|
|||||||
"0xE1","0x05","0x00","0x03","Hi FERR or NERR Register","R","R","R","R","R","R","R","R","0x00","Lindenhurst Chipset Event: Hi Nonfatal"
|
"0xE1","0x05","0x00","0x03","Hi FERR or NERR Register","R","R","R","R","R","R","R","R","0x00","Lindenhurst Chipset Event: Hi Nonfatal"
|
||||||
"0xE1","0x05","0x01","0x02","Status Register Contents","R","R","R","R","R","R","R","R","0x00","Fatal internal north bridge error"
|
"0xE1","0x05","0x01","0x02","Status Register Contents","R","R","R","R","R","R","R","R","0x00","Fatal internal north bridge error"
|
||||||
"0xE1","0x05","0x01","0x03","Status Register Contents","R","R","R","R","R","R","R","R","0x00","Nonfatal internal north bridge error"
|
"0xE1","0x05","0x01","0x03","Status Register Contents","R","R","R","R","R","R","R","R","0x00","Nonfatal internal north bridge error"
|
||||||
"0xE2","0x00","Register ID","R","First Fire Bit","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI Industry Standard Register Dump"
|
"0xE1","0x05","0x01","0x04","Bus","Device","Function Number","R","R","R","R","R","R","0x00","Link Degrade Event"
|
||||||
|
"0xE1","0x05","0x01","0x05","R","R","R","R","R","R","R","R","R","0x00","Spurious Memory Event"
|
||||||
|
"0xE2","0x00","Register ID","R","First Fire Bit (0xFF=N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI Industry Standard Register Dump"
|
||||||
"0xE2","0x01","Register ID","R","First Fire Bit (0xFF if N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI-X Industry Standard Register Dump"
|
"0xE2","0x01","Register ID","R","First Fire Bit (0xFF if N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI-X Industry Standard Register Dump"
|
||||||
"0xE2","0x02","Register ID","R","First Fire Bit (0xFF if N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI Express Industry Standard Register Dump"
|
"0xE2","0x02","Register ID","R","First Fire Bit (0xFF if N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI Express Industry Standard Register Dump"
|
||||||
"0xE3","Platform ID","Register ID","R","R","R","R","R","R","Register Data (LSB)","Register Data","Register Data","Register Data (MSB)","0x00","RAW Hex Dump"
|
"0xE3","Platform ID","Register ID","R","R","R","R","R","R","Register Data (LSB)","Register Data","Register Data","Register Data (MSB)","0x00","RAW Hex Dump"
|
||||||
@ -198,5 +197,33 @@
|
|||||||
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x01","0x00","R","R","R","0x00","Processor Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x01","0x00","R","R","R","0x00","Processor Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
||||||
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x02","0x00","R","R","R","0x00","Memory Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x02","0x00","R","R","R","0x00","Memory Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
||||||
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x00","R","R","R","0x00"," Scalability Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x00","R","R","R","0x00"," Scalability Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x07","R","R","0x00","Merge Failure - BIOS version is newer than secondary server BIOS"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x08","R","R","0x00","Merge Failure - BIOS version is older than secondary server BIOS"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x09","R","R","0x00","Merge Failure - Primary server booted standalone"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x0A","R","R","0x00","Merge Failure - Communication error occurred with secondary server"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x0B","R","R","0x00","Merge Failure - Timed out waiting for secondary server"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x10","R","R","0x00","Merge Failure - No path through partition"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x11","Expected Chassis Count","R","0x00","Merge Information - Expected chassis count"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x12","Actual Chassis Count","R","0x00","Merge Information - Actual chassis count"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x19","R","R","0x00","Merge Failure - No secondary servers found to merge"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x34","R","R","0x00","Merge Failure - Primary server booted standalone"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x35","R","R","0x00","Merge Failure - Communication error occurred with primary server"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x36","R","R","0x00","Merge Failure - Secondary server booted standalone"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x41","R","R","0x00","Merge Failure - Timeout occurred waiting for primary server"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x46","R","R","0x00","Merge Failure - BIOS version is newer than primary server BIOS"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x47","R","R","0x00","Merge Failure - BIOS version is older than primary server BIOS"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x52","R","R","0x00","Merge Failure - Scalability hardware not detected"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x53","R","R","0x00","Merge Failure - No partition descriptor found"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x54","R","R","0x00","Merge Failure - Error Reading partition descriptor"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x55","R","R","0x00","Merge Failure - Error Reading system UUID"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x56","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x57","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x58","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x59","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x5A","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x5B","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x5C","R","R","0x00","Merge Failure [Byte 13 value]"
|
||||||
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x04","0x00","R","R","R","0x00","Bus PCI Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x04","0x00","R","R","R","0x00","Bus PCI Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
||||||
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x05","0x00","R","R","R","0x00","Chipset Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x05","0x00","R","R","R","0x00","Chipset Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x06","0x01","PostVersion","BMCVersion","R","0x00","Incompatible BIOS-BMC Power Executive support"
|
||||||
|
"0xC0","XX","XX","XX","XX","XX","XX","XX","0x06","0x02","R","R","R","0x00","Boot denied due to power limitations"
|
@ -31,7 +31,7 @@
|
|||||||
MAINTAINERCLEANFILES = Makefile.in
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
EXTRA_DIST = pkginfo.in prototype.in \
|
EXTRA_DIST = pkginfo.in prototype.in \
|
||||||
ipmitool.spec.in rpmmacros.in rpmrc
|
ipmitool.spec.in
|
||||||
|
|
||||||
dist-hook: pkginfo prototype rpmmacros
|
dist-hook: pkginfo prototype
|
||||||
|
|
1028
control/ipmitool.spec.in
Normal file
1028
control/ipmitool.spec.in
Normal file
File diff suppressed because it is too large
Load Diff
10
csv-revision
Executable file
10
csv-revision
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
git describe --first-parent --tags 2>/dev/null | (
|
||||||
|
IFS=- read tag rev hash
|
||||||
|
if [ $? ] && [ -n "$rev" ]; then
|
||||||
|
echo .$rev.$hash
|
||||||
|
elif [ -d .git ]; then
|
||||||
|
echo .0.gsnapshot
|
||||||
|
fi
|
||||||
|
)
|
@ -145,7 +145,7 @@ placed at the end of commands to get option usage help.
|
|||||||
> ipmievd help
|
> ipmievd help
|
||||||
.br
|
.br
|
||||||
Commands:
|
Commands:
|
||||||
open Use OpenIPMI for asyncronous notification of events
|
open Use OpenIPMI for asynchronous notification of events
|
||||||
sel Poll SEL for notification of events
|
sel Poll SEL for notification of events
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
@ -174,7 +174,7 @@ Do NOT become a daemon, instead log all messages to stderr.
|
|||||||
.TP
|
.TP
|
||||||
\fIpidfile\fP=<\fBfilename\fR>
|
\fIpidfile\fP=<\fBfilename\fR>
|
||||||
Save process ID to this file when in daemon mode. Defaults to
|
Save process ID to this file when in daemon mode. Defaults to
|
||||||
/var/run/ipmievd.pid\fIN\fP (where \fIN\fP is the ipmi device
|
/run/ipmievd.pid\fIN\fP (where \fIN\fP is the ipmi device
|
||||||
number -- defaults to 0).
|
number -- defaults to 0).
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ Do NOT become a daemon, instead log all messages to stderr.
|
|||||||
.TP
|
.TP
|
||||||
\fIpidfile\fP=<\fBfilename\fR>
|
\fIpidfile\fP=<\fBfilename\fR>
|
||||||
Save process ID to this file when in daemon mode. Defaults to
|
Save process ID to this file when in daemon mode. Defaults to
|
||||||
/var/run/ipmievd.pid\fIN\fP (where \fIN\fP is the ipmi device
|
/run/ipmievd.pid\fIN\fP (where \fIN\fP is the ipmi device
|
||||||
number -- defaults to 0).
|
number -- defaults to 0).
|
||||||
.TP
|
.TP
|
||||||
\fItimeout\fP=<\fBseconds\fR>
|
\fItimeout\fP=<\fBseconds\fR>
|
||||||
@ -217,6 +217,16 @@ Reading Sensors...
|
|||||||
.br
|
.br
|
||||||
Waiting for Events...
|
Waiting for Events...
|
||||||
.br
|
.br
|
||||||
|
|
||||||
|
.SH FILES
|
||||||
|
.TP
|
||||||
|
.B @IANADIR@/enterprise-numbers
|
||||||
|
system IANA PEN registry taken from http://www.iana.org/assignments/enterprise-numbers
|
||||||
|
.TP
|
||||||
|
.B ~/@IANAUSERDIR@/enterprise-numbers
|
||||||
|
user's override for the system IANA PEN registry, this file if it exists is loaded instead
|
||||||
|
of the system registry (see above).
|
||||||
|
|
||||||
.SH "AUTHOR"
|
.SH "AUTHOR"
|
||||||
Duncan Laurie <duncan@iceblink.org>
|
Duncan Laurie <duncan@iceblink.org>
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
3861
doc/ipmitool.1.in
Normal file
3861
doc/ipmitool.1.in
Normal file
File diff suppressed because it is too large
Load Diff
@ -30,12 +30,14 @@
|
|||||||
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
noinst_HEADERS = log.h bswap.h helper.h ipmi.h ipmi_cc.h ipmi_intf.h \
|
noinst_HEADERS = log.h bswap.h hpm2.h helper.h ipmi.h ipmi_cc.h ipmi_intf.h \
|
||||||
ipmi_chassis.h ipmi_entity.h ipmi_fru.h ipmi_hpmfwupg.h ipmi_lanp.h \
|
ipmi_chassis.h ipmi_entity.h ipmi_fru.h ipmi_hpmfwupg.h ipmi_lanp.h \
|
||||||
ipmi_sdr.h ipmi_sel.h ipmi_sol.h ipmi_mc.h ipmi_raw.h \
|
ipmi_sdr.h ipmi_sel.h ipmi_sol.h ipmi_mc.h ipmi_raw.h \
|
||||||
ipmi_channel.h ipmi_sensor.h ipmi_event.h ipmi_session.h \
|
ipmi_channel.h ipmi_sensor.h ipmi_event.h ipmi_session.h \
|
||||||
ipmi_strings.h ipmi_constants.h ipmi_user.h ipmi_pef.h \
|
ipmi_strings.h ipmi_constants.h ipmi_user.h ipmi_pef.h \
|
||||||
ipmi_oem.h ipmi_isol.h ipmi_sunoem.h ipmi_picmg.h \
|
ipmi_oem.h ipmi_sdradd.h ipmi_isol.h ipmi_sunoem.h ipmi_picmg.h \
|
||||||
ipmi_fwum.h ipmi_main.h ipmi_tsol.h ipmi_firewall.h \
|
ipmi_fwum.h ipmi_main.h ipmi_tsol.h ipmi_firewall.h \
|
||||||
ipmi_kontronoem.h
|
ipmi_kontronoem.h ipmi_ekanalyzer.h ipmi_gendev.h ipmi_ime.h \
|
||||||
|
ipmi_delloem.h ipmi_dcmi.h ipmi_vita.h ipmi_sel_supermicro.h \
|
||||||
|
ipmi_cfgp.h ipmi_lanp6.h ipmi_quantaoem.h ipmi_time.h
|
||||||
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_BSWAP_H
|
#pragma once
|
||||||
#define IPMI_BSWAP_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
@ -49,5 +48,3 @@
|
|||||||
# define BSWAP_32(x) ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) |\
|
# define BSWAP_32(x) ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) |\
|
||||||
(((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
|
(((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* IPMI_BSWAP_H */
|
|
228
include/ipmitool/helper.h
Normal file
228
include/ipmitool/helper.h
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h> /* For free() */
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef tboolean
|
||||||
|
#define tboolean int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define __UNUSED__(x) x __attribute__((unused))
|
||||||
|
#else
|
||||||
|
#define __UNUSED__(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* IPMI spec. - UID 0 reserved, 63 maximum UID which can be used */
|
||||||
|
#ifndef IPMI_UID_MIN
|
||||||
|
# define IPMI_UID_MIN 1
|
||||||
|
#endif
|
||||||
|
#ifndef IPMI_UID_MAX
|
||||||
|
# define IPMI_UID_MAX 63
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct ipmi_intf;
|
||||||
|
|
||||||
|
struct valstr {
|
||||||
|
uint32_t val;
|
||||||
|
const char * str;
|
||||||
|
};
|
||||||
|
struct oemvalstr {
|
||||||
|
uint32_t oem;
|
||||||
|
uint16_t val;
|
||||||
|
const char * str;
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
specific_val2str(uint32_t val,
|
||||||
|
const struct valstr *specific,
|
||||||
|
const struct valstr *generic);
|
||||||
|
const char *val2str(uint32_t val, const struct valstr * vs);
|
||||||
|
const char *oemval2str(uint32_t oem, uint32_t val, const struct oemvalstr * vs);
|
||||||
|
|
||||||
|
int str2double(const char * str, double * double_ptr);
|
||||||
|
int str2long(const char * str, int64_t * lng_ptr);
|
||||||
|
int str2ulong(const char * str, uint64_t * ulng_ptr);
|
||||||
|
int str2int(const char * str, int32_t * int_ptr);
|
||||||
|
int str2uint(const char * str, uint32_t * uint_ptr);
|
||||||
|
int str2short(const char * str, int16_t * shrt_ptr);
|
||||||
|
int str2ushort(const char * str, uint16_t * ushrt_ptr);
|
||||||
|
int str2char(const char * str, int8_t * chr_ptr);
|
||||||
|
int str2uchar(const char * str, uint8_t * uchr_ptr);
|
||||||
|
|
||||||
|
bool args2buf(int argc, char *argv[], uint8_t *out, size_t len);
|
||||||
|
|
||||||
|
int eval_ccode(const int ccode);
|
||||||
|
|
||||||
|
int is_fru_id(const char *argv_ptr, uint8_t *fru_id_ptr);
|
||||||
|
int is_ipmi_channel_num(const char *argv_ptr, uint8_t *channel_ptr);
|
||||||
|
int is_ipmi_user_id(const char *argv_ptr, uint8_t *ipmi_uid_ptr);
|
||||||
|
int is_ipmi_user_priv_limit(const char *argv_ptr, uint8_t *ipmi_priv_limit_ptr);
|
||||||
|
|
||||||
|
uint32_t str2val32(const char *str, const struct valstr *vs);
|
||||||
|
static inline uint16_t str2val(const char *str, const struct valstr *vs)
|
||||||
|
{
|
||||||
|
return (uint16_t)str2val32(str, vs);
|
||||||
|
}
|
||||||
|
void print_valstr(const struct valstr * vs, const char * title, int loglevel);
|
||||||
|
void print_valstr_2col(const struct valstr * vs, const char * title, int loglevel);
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t buf2short(uint8_t * buf);
|
||||||
|
uint32_t buf2long(uint8_t * buf);
|
||||||
|
#define BUF2STR_MAXIMUM_OUTPUT_SIZE (3*1024 + 1)
|
||||||
|
const char * buf2str_extended(const uint8_t *buf, int len, const char *sep);
|
||||||
|
const char * buf2str(const uint8_t *buf, int len);
|
||||||
|
int str2mac(const char *arg, uint8_t *buf);
|
||||||
|
const char * mac2str(const uint8_t *buf);
|
||||||
|
int ipmi_parse_hex(const char *str, uint8_t *out, int size);
|
||||||
|
void printbuf(const uint8_t * buf, int len, const char * desc);
|
||||||
|
uint8_t ipmi_csum(uint8_t * d, int s);
|
||||||
|
FILE * ipmi_open_file(const char * file, int rw);
|
||||||
|
void ipmi_start_daemon(struct ipmi_intf *intf);
|
||||||
|
uint16_t ipmi_get_oem_id(struct ipmi_intf *intf);
|
||||||
|
|
||||||
|
#define IS_SET(v, b) ((v) & (1 << (b)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free the memory and clear the pointer.
|
||||||
|
* @param[in] ptr - a pointer to your pointer to free.
|
||||||
|
*/
|
||||||
|
static inline void free_n(void *ptr) {
|
||||||
|
void **pptr = (void **)ptr;
|
||||||
|
|
||||||
|
if (pptr && *pptr) {
|
||||||
|
free(*pptr);
|
||||||
|
*pptr = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* le16toh(), hto16le(), et. al. don't exist for Windows or Apple */
|
||||||
|
/* For portability, let's simply define our own versions here */
|
||||||
|
|
||||||
|
/* IPMI is always little-endian */
|
||||||
|
static inline uint16_t ipmi16toh(void *ipmi16)
|
||||||
|
{
|
||||||
|
uint8_t *ipmi = (uint8_t *)ipmi16;
|
||||||
|
uint16_t h;
|
||||||
|
|
||||||
|
h = (uint16_t)ipmi[1] << 8; /* MSB */
|
||||||
|
h |= ipmi[0]; /* LSB */
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void htoipmi16(uint16_t h, uint8_t *ipmi)
|
||||||
|
{
|
||||||
|
ipmi[0] = h & 0xFF; /* LSB */
|
||||||
|
ipmi[1] = h >> 8; /* MSB */
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t ipmi24toh(void *ipmi24)
|
||||||
|
{
|
||||||
|
uint8_t *ipmi = (uint8_t *)ipmi24;
|
||||||
|
uint32_t h = 0;
|
||||||
|
|
||||||
|
h = (uint32_t)ipmi[2] << 16; /* MSB */
|
||||||
|
h |= ipmi[1] << 8;
|
||||||
|
h |= ipmi[0]; /* LSB */
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void htoipmi24(uint32_t h, uint8_t *ipmi)
|
||||||
|
{
|
||||||
|
ipmi[0] = h & 0xFF; /* LSB */
|
||||||
|
ipmi[1] = (h >> 8) & 0xFF;
|
||||||
|
ipmi[2] = (h >> 16) & 0xFF; /* MSB */
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t ipmi32toh(void *ipmi32)
|
||||||
|
{
|
||||||
|
uint8_t *ipmi = ipmi32;
|
||||||
|
uint32_t h;
|
||||||
|
|
||||||
|
h = (uint32_t)ipmi[3] << 24; /* MSB */
|
||||||
|
h |= ipmi[2] << 16;
|
||||||
|
h |= ipmi[1] << 8;
|
||||||
|
h |= ipmi[0]; /* LSB */
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void htoipmi32(uint32_t h, uint8_t *ipmi)
|
||||||
|
{
|
||||||
|
ipmi[0] = h & 0xFF; /* LSB */
|
||||||
|
ipmi[1] = (h >> 8) & 0xFF;
|
||||||
|
ipmi[2] = (h >> 16) & 0xFF;
|
||||||
|
ipmi[3] = (h >> 24) & 0xFF; /* MSB */
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t *array_byteswap(uint8_t *buffer, size_t length);
|
||||||
|
uint8_t *array_ntoh(uint8_t *buffer, size_t length);
|
||||||
|
uint8_t *array_letoh(uint8_t *buffer, size_t length);
|
||||||
|
|
||||||
|
#define ipmi_open_file_read(file) ipmi_open_file(file, 0)
|
||||||
|
#define ipmi_open_file_write(file) ipmi_open_file(file, 1)
|
||||||
|
|
||||||
|
#ifndef __min
|
||||||
|
# define __min(a, b) ((a) < (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __max
|
||||||
|
# define __max(a, b) ((a) > (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __minlen
|
||||||
|
# define __minlen(a, b) ({ int x=strlen(a); int y=strlen(b); (x < y) ? x : y;})
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __maxlen
|
||||||
|
# define __maxlen(a, b) ({ int x=strlen(a); int y=strlen(b); (x > y) ? x : y;})
|
||||||
|
#endif
|
93
include/ipmitool/hpm2.h
Normal file
93
include/ipmitool/hpm2.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012 Pigeon Point Systems. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Pigeon Point Systems nor the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* PIGEON POINT SYSTEMS ("PPS") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* PPS OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF PPS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <ipmitool/ipmi_intf.h>
|
||||||
|
|
||||||
|
/* Global HPM.2 defines */
|
||||||
|
#define HPM2_REVISION 0x01
|
||||||
|
#define HPM3_REVISION 0x01
|
||||||
|
#define HPM2_LAN_PARAMS_REV 0x01
|
||||||
|
#define HPM2_SOL_PARAMS_REV 0x01
|
||||||
|
#define HPM3_LAN_PARAMS_REV 0x01
|
||||||
|
/* IPMI defines parameter revision as
|
||||||
|
* MSN = present revision,
|
||||||
|
* LSN = oldest revision parameter is
|
||||||
|
* backward compatible with. */
|
||||||
|
#define LAN_PARAM_REV(x, y) (((x) << 4) | ((y) & 0xF))
|
||||||
|
|
||||||
|
/* HPM.2 capabilities */
|
||||||
|
#define HPM2_CAPS_SOL_EXTENSION 0x01
|
||||||
|
#define HPM2_CAPS_PACKET_TRACE 0x02
|
||||||
|
#define HPM2_CAPS_EXT_MANAGEMENT 0x04
|
||||||
|
#define HPM2_CAPS_VERSION_SENSOR 0x08
|
||||||
|
#define HPM2_CAPS_DYNAMIC_SESSIONS 0x10
|
||||||
|
|
||||||
|
#if HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(push, 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* HPM.2 LAN attach capabilities */
|
||||||
|
struct hpm2_lan_attach_capabilities {
|
||||||
|
uint8_t hpm2_revision_id;
|
||||||
|
uint16_t lan_channel_mask;
|
||||||
|
uint8_t hpm2_caps;
|
||||||
|
uint8_t hpm2_lan_params_start;
|
||||||
|
uint8_t hpm2_lan_params_rev;
|
||||||
|
uint8_t hpm2_sol_params_start;
|
||||||
|
uint8_t hpm2_sol_params_rev;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
|
/* HPM.2 LAN channel capabilities */
|
||||||
|
struct hpm2_lan_channel_capabilities {
|
||||||
|
uint8_t capabilities;
|
||||||
|
uint8_t attach_type;
|
||||||
|
uint8_t bandwidth_class;
|
||||||
|
uint16_t max_inbound_pld_size;
|
||||||
|
uint16_t max_outbound_pld_size;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
|
#if HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* HPM.2 command assignments */
|
||||||
|
#define HPM2_GET_LAN_ATTACH_CAPABILITIES 0x3E
|
||||||
|
|
||||||
|
extern int hpm2_get_capabilities(struct ipmi_intf * intf,
|
||||||
|
struct hpm2_lan_attach_capabilities * caps);
|
||||||
|
extern int hpm2_get_lan_channel_capabilities(struct ipmi_intf * intf,
|
||||||
|
uint8_t hpm2_lan_params_start,
|
||||||
|
struct hpm2_lan_channel_capabilities * caps);
|
||||||
|
extern int hpm2_detect_max_payload_size(struct ipmi_intf * intf);
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_H
|
#pragma once
|
||||||
#define IPMI_H
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -41,8 +40,19 @@
|
|||||||
#include <ipmitool/helper.h>
|
#include <ipmitool/helper.h>
|
||||||
#include <ipmitool/ipmi_cc.h>
|
#include <ipmitool/ipmi_cc.h>
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define IPMI_BUF_SIZE 1024
|
#define IPMI_BUF_SIZE 1024
|
||||||
|
#define IPMI_MAX_MD_SIZE 0x20
|
||||||
|
|
||||||
|
#if HAVE_PRAGMA_PACK
|
||||||
|
#define ATTRIBUTE_PACKING
|
||||||
|
#else
|
||||||
|
#define ATTRIBUTE_PACKING __attribute__ ((packed))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* From table 13.16 of the IPMI v2 specification */
|
/* From table 13.16 of the IPMI v2 specification */
|
||||||
#define IPMI_PAYLOAD_TYPE_IPMI 0x00
|
#define IPMI_PAYLOAD_TYPE_IPMI 0x00
|
||||||
@ -138,6 +148,7 @@ struct ipmi_rq_entry {
|
|||||||
uint8_t rq_seq;
|
uint8_t rq_seq;
|
||||||
uint8_t *msg_data;
|
uint8_t *msg_data;
|
||||||
int msg_len;
|
int msg_len;
|
||||||
|
int bridging_level;
|
||||||
struct ipmi_rq_entry *next;
|
struct ipmi_rq_entry *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -200,13 +211,13 @@ struct ipmi_rs {
|
|||||||
uint32_t console_id;
|
uint32_t console_id;
|
||||||
uint8_t bmc_rand[16]; /* Random number generated by the BMC */
|
uint8_t bmc_rand[16]; /* Random number generated by the BMC */
|
||||||
uint8_t bmc_guid[16];
|
uint8_t bmc_guid[16];
|
||||||
uint8_t key_exchange_auth_code[20];
|
uint8_t key_exchange_auth_code[IPMI_MAX_MD_SIZE];
|
||||||
} rakp2_message;
|
} rakp2_message;
|
||||||
struct {
|
struct {
|
||||||
uint8_t message_tag;
|
uint8_t message_tag;
|
||||||
uint8_t rakp_return_code;
|
uint8_t rakp_return_code;
|
||||||
uint32_t console_id;
|
uint32_t console_id;
|
||||||
uint8_t integrity_check_value[20];
|
uint8_t integrity_check_value[IPMI_MAX_MD_SIZE];
|
||||||
} rakp4_message;
|
} rakp4_message;
|
||||||
struct {
|
struct {
|
||||||
uint8_t packet_sequence_number;
|
uint8_t packet_sequence_number;
|
||||||
@ -228,8 +239,10 @@ struct ipmi_rs {
|
|||||||
#define IPMI_NETFN_APP 0x6
|
#define IPMI_NETFN_APP 0x6
|
||||||
#define IPMI_NETFN_FIRMWARE 0x8
|
#define IPMI_NETFN_FIRMWARE 0x8
|
||||||
#define IPMI_NETFN_STORAGE 0xa
|
#define IPMI_NETFN_STORAGE 0xa
|
||||||
#define IPMI_NETFN_TRANSPORT 0xc
|
#define IPMI_NETFN_TRANSPORT 0xc
|
||||||
#define IPMI_NETFN_PICMG 0x2C
|
#define IPMI_NETFN_PICMG 0x2C
|
||||||
|
#define IPMI_NETFN_DCGRP 0x2C
|
||||||
|
#define IPMI_NETFN_OEM 0x2E
|
||||||
#define IPMI_NETFN_ISOL 0x34
|
#define IPMI_NETFN_ISOL 0x34
|
||||||
#define IPMI_NETFN_TSOL 0x30
|
#define IPMI_NETFN_TSOL 0x30
|
||||||
|
|
||||||
@ -238,19 +251,58 @@ struct ipmi_rs {
|
|||||||
|
|
||||||
|
|
||||||
/* These values are IANA numbers */
|
/* These values are IANA numbers */
|
||||||
|
/************************************************************************
|
||||||
|
* Add ID String for IANA Enterprise Number of IBM & ADLINK
|
||||||
|
* https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
typedef enum IPMI_OEM {
|
typedef enum IPMI_OEM {
|
||||||
IPMI_OEM_UNKNOWN = 0,
|
IPMI_OEM_UNKNOWN = 0,
|
||||||
IPMI_OEM_SUN = 42,
|
IPMI_OEM_DEBUG = 0xFFFFFE, /* Hoping IANA won't hit this soon */
|
||||||
IPMI_OEM_NOKIA = 94,
|
IPMI_OEM_RESERVED = 0x0FFFFF, /* As per IPMI 2.0 specification */
|
||||||
IPMI_OEM_INTEL = 343,
|
/* 2 for [IBM] */
|
||||||
IPMI_OEM_TYAN = 6653,
|
IPMI_OEM_IBM_2 = 2,
|
||||||
IPMI_OEM_NEWISYS = 9237,
|
IPMI_OEM_HP = 11,
|
||||||
IPMI_OEM_SUPERMICRO = 10876,
|
IPMI_OEM_SUN = 42,
|
||||||
IPMI_OEM_GOOGLE = 11129,
|
IPMI_OEM_NOKIA = 94,
|
||||||
IPMI_OEM_PICMG = 12634,
|
IPMI_OEM_BULL = 107,
|
||||||
IPMI_OEM_KONTRON = 15000,
|
IPMI_OEM_HITACHI_116 = 116,
|
||||||
|
IPMI_OEM_NEC = 119,
|
||||||
|
IPMI_OEM_TOSHIBA = 186,
|
||||||
|
IPMI_OEM_ERICSSON = 193,
|
||||||
|
IPMI_OEM_INTEL = 343,
|
||||||
|
IPMI_OEM_TATUNG = 373,
|
||||||
|
IPMI_OEM_HITACHI_399 = 399,
|
||||||
|
IPMI_OEM_DELL = 674,
|
||||||
|
IPMI_OEM_LMC = 2168,
|
||||||
|
IPMI_OEM_RADISYS = 4337,
|
||||||
|
IPMI_OEM_BROADCOM = 4413,
|
||||||
|
/* 4769 for [IBM Corporation] */
|
||||||
|
IPMI_OEM_IBM_4769 = 4769,
|
||||||
|
IPMI_OEM_MAGNUM = 5593,
|
||||||
|
IPMI_OEM_TYAN = 6653,
|
||||||
|
IPMI_OEM_QUANTA = 7244,
|
||||||
|
IPMI_OEM_VIKING = 9237,
|
||||||
|
IPMI_OEM_ADVANTECH = 10297,
|
||||||
|
IPMI_OEM_FUJITSU_SIEMENS = 10368,
|
||||||
|
IPMI_OEM_AVOCENT = 10418,
|
||||||
|
IPMI_OEM_PEPPERCON = 10437,
|
||||||
|
IPMI_OEM_SUPERMICRO = 10876,
|
||||||
|
IPMI_OEM_OSA = 11102,
|
||||||
|
IPMI_OEM_GOOGLE = 11129,
|
||||||
|
IPMI_OEM_PICMG = 12634,
|
||||||
|
IPMI_OEM_RARITAN = 13742,
|
||||||
|
IPMI_OEM_KONTRON = 15000,
|
||||||
|
IPMI_OEM_PPS = 16394,
|
||||||
|
/* 20301 for [IBM eServer X] */
|
||||||
|
IPMI_OEM_IBM_20301 = 20301,
|
||||||
|
IPMI_OEM_AMI = 20974,
|
||||||
|
/* 24339 for [ADLINK TECHNOLOGY INC.] */
|
||||||
|
IPMI_OEM_ADLINK_24339 = 24339,
|
||||||
|
IPMI_OEM_NOKIA_SOLUTIONS_AND_NETWORKS = 28458,
|
||||||
|
IPMI_OEM_VITA = 33196,
|
||||||
|
IPMI_OEM_SUPERMICRO_47488 = 47488,
|
||||||
|
IPMI_OEM_YADRO = 49769,
|
||||||
} IPMI_OEM;
|
} IPMI_OEM;
|
||||||
|
|
||||||
extern const struct valstr completion_code_vals[];
|
extern const struct valstr completion_code_vals[];
|
||||||
|
|
||||||
#endif /* IPMI_H */
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_CC_H
|
#pragma once
|
||||||
#define IPMI_CC_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Thu Jan 11 09:32:41 2007
|
Thu Jan 11 09:32:41 2007
|
||||||
@ -71,6 +70,3 @@
|
|||||||
#define IPMI_CC_NOT_SUPPORTED_PRESENT_STATE 0xd5
|
#define IPMI_CC_NOT_SUPPORTED_PRESENT_STATE 0xd5
|
||||||
#define IPMI_CC_ILLEGAL_COMMAND_DISABLED 0xd6
|
#define IPMI_CC_ILLEGAL_COMMAND_DISABLED 0xd6
|
||||||
#define IPMI_CC_UNSPECIFIED_ERROR 0xff
|
#define IPMI_CC_UNSPECIFIED_ERROR 0xff
|
||||||
|
|
||||||
|
|
||||||
#endif /*IPMI_CC_H*/
|
|
195
include/ipmitool/ipmi_cfgp.h
Normal file
195
include/ipmitool/ipmi_cfgp.h
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016 Pentair Technical Products. All right reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Pentair Technical Products or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||||
|
* PENTAIR TECHNICAL SOLUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* Forward declarations. */
|
||||||
|
struct ipmi_cfgp;
|
||||||
|
struct ipmi_cfgp_ctx;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Action types.
|
||||||
|
*/
|
||||||
|
enum {
|
||||||
|
/* parse dumped parameter data */
|
||||||
|
CFGP_PARSE,
|
||||||
|
/* get parameter from BMC */
|
||||||
|
CFGP_GET,
|
||||||
|
/* set parameter to BMC */
|
||||||
|
CFGP_SET,
|
||||||
|
/* output parameter data in form that can be parsed back */
|
||||||
|
CFGP_SAVE,
|
||||||
|
/* print parameter in user-friendly format */
|
||||||
|
CFGP_PRINT
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Action-specific information.
|
||||||
|
*/
|
||||||
|
struct ipmi_cfgp_action {
|
||||||
|
/* Action type. */
|
||||||
|
int type;
|
||||||
|
|
||||||
|
/* Set selector. */
|
||||||
|
int set;
|
||||||
|
|
||||||
|
/* Block selector. */
|
||||||
|
int block;
|
||||||
|
|
||||||
|
/* No error output needed. */
|
||||||
|
int quiet;
|
||||||
|
|
||||||
|
/* Number of command line arguments (only for parse action). */
|
||||||
|
int argc;
|
||||||
|
|
||||||
|
/* Command line arguments (only for parse action). */
|
||||||
|
const char **argv;
|
||||||
|
|
||||||
|
/* Output file (only for dump/print actions). */
|
||||||
|
FILE *file;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Access types.
|
||||||
|
*/
|
||||||
|
enum {
|
||||||
|
CFGP_RDWR,
|
||||||
|
CFGP_RDONLY,
|
||||||
|
CFGP_WRONLY,
|
||||||
|
CFGP_RESERVED
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configuration parameter descriptor.
|
||||||
|
*/
|
||||||
|
struct ipmi_cfgp {
|
||||||
|
/* Parameter name. */
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
/* Parameter format description. */
|
||||||
|
const char *format;
|
||||||
|
|
||||||
|
/* Various parameter traits. */
|
||||||
|
unsigned int size; /* block size */
|
||||||
|
unsigned int access:2; /* read-write/read-only/write-only */
|
||||||
|
unsigned int is_set:1; /* takes non-zero set selectors */
|
||||||
|
unsigned int first_set:1; /* 1 = 1-based set selector */
|
||||||
|
unsigned int has_blocks:1; /* takes non-zero block selectors */
|
||||||
|
unsigned int first_block:1; /* 1 = 1-based block selector */
|
||||||
|
|
||||||
|
/* Parameter-specific data. */
|
||||||
|
int specific;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Parameter callback. */
|
||||||
|
typedef int (*ipmi_cfgp_handler_t)(void *priv,
|
||||||
|
const struct ipmi_cfgp *p, const struct ipmi_cfgp_action *action,
|
||||||
|
unsigned char *data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parameter selector.
|
||||||
|
*/
|
||||||
|
struct ipmi_cfgp_sel {
|
||||||
|
int param;
|
||||||
|
int set;
|
||||||
|
int block;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configuration parameter data.
|
||||||
|
*/
|
||||||
|
struct ipmi_cfgp_data {
|
||||||
|
struct ipmi_cfgp_data *next;
|
||||||
|
struct ipmi_cfgp_sel sel;
|
||||||
|
unsigned char data[];
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configuration parameter operation context.
|
||||||
|
*/
|
||||||
|
struct ipmi_cfgp_ctx {
|
||||||
|
/* Set of parameters. */
|
||||||
|
const struct ipmi_cfgp *set;
|
||||||
|
|
||||||
|
/* Descriptor count. */
|
||||||
|
int count;
|
||||||
|
|
||||||
|
/* Parameter action handler. */
|
||||||
|
ipmi_cfgp_handler_t handler;
|
||||||
|
|
||||||
|
/* ipmitool cmd name */
|
||||||
|
const char *cmdname;
|
||||||
|
|
||||||
|
/* List of parameter values. */
|
||||||
|
struct ipmi_cfgp_data *v;
|
||||||
|
|
||||||
|
/* Private data. */
|
||||||
|
void *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Initialize configuration context. */
|
||||||
|
extern int ipmi_cfgp_init(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
const struct ipmi_cfgp *set, unsigned int count,
|
||||||
|
const char *cmdname,
|
||||||
|
ipmi_cfgp_handler_t handler, void *priv);
|
||||||
|
|
||||||
|
/* Uninitialize context, free allocated memory. */
|
||||||
|
extern int ipmi_cfgp_uninit(struct ipmi_cfgp_ctx *ctx);
|
||||||
|
|
||||||
|
/* Print parameter usage. */
|
||||||
|
void ipmi_cfgp_usage(const struct ipmi_cfgp *set, int count, int write);
|
||||||
|
|
||||||
|
/* Parse parameter selector from command line. */
|
||||||
|
extern int ipmi_cfgp_parse_sel(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
int argc, const char **argv, struct ipmi_cfgp_sel *sel);
|
||||||
|
|
||||||
|
/* Parse parameter data from command line. */
|
||||||
|
extern int ipmi_cfgp_parse_data(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
const struct ipmi_cfgp_sel *sel, int argc, const char **argv);
|
||||||
|
|
||||||
|
/* Get parameter data from BMC. */
|
||||||
|
extern int ipmi_cfgp_get(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
const struct ipmi_cfgp_sel *sel);
|
||||||
|
|
||||||
|
/* Set parameter data to BMC. */
|
||||||
|
extern int ipmi_cfgp_set(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
const struct ipmi_cfgp_sel *sel);
|
||||||
|
|
||||||
|
/* Write parameter data to file. */
|
||||||
|
extern int ipmi_cfgp_save(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
const struct ipmi_cfgp_sel *sel, FILE *file);
|
||||||
|
|
||||||
|
/* Print parameter data in user-friendly format. */
|
||||||
|
extern int ipmi_cfgp_print(struct ipmi_cfgp_ctx *ctx,
|
||||||
|
const struct ipmi_cfgp_sel *sel, FILE *file);
|
@ -30,16 +30,17 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_CHANNEL_H
|
#pragma once
|
||||||
#define IPMI_CHANNEL_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_intf.h>
|
||||||
|
|
||||||
|
|
||||||
#define IPMI_GET_CHANNEL_AUTH_CAP 0x38
|
#define IPMI_GET_CHANNEL_AUTH_CAP 0x38
|
||||||
|
#define IPMI_SET_CHANNEL_ACCESS 0x40
|
||||||
#define IPMI_GET_CHANNEL_ACCESS 0x41
|
#define IPMI_GET_CHANNEL_ACCESS 0x41
|
||||||
#define IPMI_GET_CHANNEL_INFO 0x42
|
#define IPMI_GET_CHANNEL_INFO 0x42
|
||||||
#define IPMI_SET_USER_ACCESS 0x43
|
#define IPMI_SET_USER_ACCESS 0x43
|
||||||
@ -49,11 +50,112 @@
|
|||||||
#define IPMI_SET_USER_PASSWORD 0x47
|
#define IPMI_SET_USER_PASSWORD 0x47
|
||||||
#define IPMI_GET_CHANNEL_CIPHER_SUITES 0x54
|
#define IPMI_GET_CHANNEL_CIPHER_SUITES 0x54
|
||||||
|
|
||||||
|
/* These are for channel_info_t.session_support */
|
||||||
|
#define IPMI_CHANNEL_SESSION_LESS 0x00
|
||||||
|
#define IPMI_CHANNEL_SESSION_SINGLE 0x40
|
||||||
|
#define IPMI_CHANNEL_SESSION_MULTI 0x80
|
||||||
|
#define IPMI_CHANNEL_SESSION_BASED 0xC0
|
||||||
|
|
||||||
|
/* Fixed channel numbers as per Table 6-1 */
|
||||||
|
typedef enum {
|
||||||
|
CH_PRIMARY_IPMB,
|
||||||
|
CH_IMP_SPECIFIC_1,
|
||||||
|
CH_IMP_SPECIFIC_2,
|
||||||
|
CH_IMP_SPECIFIC_3,
|
||||||
|
CH_IMP_SPECIFIC_4,
|
||||||
|
CH_IMP_SPECIFIC_5,
|
||||||
|
CH_IMP_SPECIFIC_6,
|
||||||
|
CH_IMP_SPECIFIC_7,
|
||||||
|
CH_IMP_SPECIFIC_8,
|
||||||
|
CH_IMP_SPECIFIC_9,
|
||||||
|
CH_IMP_SPECIFIC_A,
|
||||||
|
CH_IMP_SPECIFIC_B,
|
||||||
|
CH_RSVD1,
|
||||||
|
CH_RSVD2,
|
||||||
|
CH_CURRENT,
|
||||||
|
CH_SYSTEM,
|
||||||
|
CH_TOTAL,
|
||||||
|
CH_UNKNOWN = UINT8_MAX
|
||||||
|
} ipmi_channel_num_t;
|
||||||
|
|
||||||
|
/* (22.24) Get Channel Info */
|
||||||
|
struct channel_info_t {
|
||||||
|
uint8_t channel;
|
||||||
|
uint8_t medium;
|
||||||
|
uint8_t protocol;
|
||||||
|
uint8_t session_support;
|
||||||
|
uint8_t active_sessions;
|
||||||
|
uint8_t vendor_id[3];
|
||||||
|
uint8_t aux_info[2];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* (22.22 / 22.23) Set/Get Channel Access */
|
||||||
|
typedef enum {
|
||||||
|
ALERTING_ENABLED = 0,
|
||||||
|
ALERTING_DISABLED = (1 << 5) /* See Table 22 */
|
||||||
|
} alerting_t;
|
||||||
|
|
||||||
|
struct channel_access_t {
|
||||||
|
uint8_t access_mode;
|
||||||
|
alerting_t alerting;
|
||||||
|
uint8_t channel;
|
||||||
|
uint8_t per_message_auth;
|
||||||
|
uint8_t privilege_limit;
|
||||||
|
uint8_t user_level_auth;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Cipher Suite Record Format from table 22-18 of the IPMI v2.0 spec
|
||||||
|
*/
|
||||||
|
enum cipher_suite_format_tag {
|
||||||
|
STANDARD_CIPHER_SUITE = 0xc0,
|
||||||
|
OEM_CIPHER_SUITE = 0xc1,
|
||||||
|
};
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct std_cipher_suite_record_t {
|
||||||
|
uint8_t start_of_record;
|
||||||
|
uint8_t cipher_suite_id;
|
||||||
|
uint8_t auth_alg;
|
||||||
|
uint8_t integrity_alg;
|
||||||
|
uint8_t crypt_alg;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
struct oem_cipher_suite_record_t {
|
||||||
|
uint8_t start_of_record;
|
||||||
|
uint8_t cipher_suite_id;
|
||||||
|
uint8_t iana[3];
|
||||||
|
uint8_t auth_alg;
|
||||||
|
uint8_t integrity_alg;
|
||||||
|
uint8_t crypt_alg;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
#define CIPHER_ALG_MASK 0x3f
|
||||||
|
#define MAX_CIPHER_SUITE_RECORD_OFFSET 0x40
|
||||||
|
#define MAX_CIPHER_SUITE_DATA_LEN 0x10
|
||||||
|
#define LIST_ALGORITHMS_BY_CIPHER_SUITE 0x80
|
||||||
|
|
||||||
|
/* Below is the theoretical maximum number of cipher suites that could be
|
||||||
|
* reported by a BMC. That is with the Get Channel Cipher Suites Command, at 16
|
||||||
|
* bytes at a time and 0x40 requests, it can report 1024 bytes, which is about
|
||||||
|
* 204 standard records or 128 OEM records. Really, we probably don't need more
|
||||||
|
* than about 20, which is the full set of standard records plus a few OEM
|
||||||
|
* records.
|
||||||
|
*/
|
||||||
|
#define MAX_CIPHER_SUITE_COUNT (MAX_CIPHER_SUITE_RECORD_OFFSET * \
|
||||||
|
MAX_CIPHER_SUITE_DATA_LEN / \
|
||||||
|
sizeof(struct std_cipher_suite_record_t))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Get Authentication Capabilities response structure
|
* The Get Authentication Capabilities response structure
|
||||||
* From table 22-15 of the IPMI v2.0 spec
|
* From table 22-15 of the IPMI v2.0 spec
|
||||||
*/
|
*/
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct get_channel_auth_cap_rsp {
|
struct get_channel_auth_cap_rsp {
|
||||||
uint8_t channel_number;
|
uint8_t channel_number;
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
@ -84,146 +186,39 @@ struct get_channel_auth_cap_rsp {
|
|||||||
#endif
|
#endif
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
uint8_t __reserved3 : 6;
|
uint8_t __reserved3 : 6;
|
||||||
uint8_t ipmiv15_support : 1; /* channel supports IPMI v1.5 connections */
|
|
||||||
uint8_t ipmiv20_support : 1; /* channel supports IPMI v2.0 connections */
|
uint8_t ipmiv20_support : 1; /* channel supports IPMI v2.0 connections */
|
||||||
|
uint8_t ipmiv15_support : 1; /* channel supports IPMI v1.5 connections */
|
||||||
#else
|
#else
|
||||||
uint8_t ipmiv20_support : 1; /* channel supports IPMI v2.0 connections */
|
|
||||||
uint8_t ipmiv15_support : 1; /* channel supports IPMI v1.5 connections */
|
uint8_t ipmiv15_support : 1; /* channel supports IPMI v1.5 connections */
|
||||||
|
uint8_t ipmiv20_support : 1; /* channel supports IPMI v2.0 connections */
|
||||||
uint8_t __reserved3 : 6;
|
uint8_t __reserved3 : 6;
|
||||||
#endif
|
#endif
|
||||||
uint8_t oem_id[3]; /* IANA enterprise number for auth type */
|
uint8_t oem_id[3]; /* IANA enterprise number for auth type */
|
||||||
uint8_t oem_aux_data; /* Additional OEM specific data for oem auths */
|
uint8_t oem_aux_data; /* Additional OEM specific data for oem auths */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
|
||||||
/*
|
|
||||||
* The Get Channel Info response structure
|
|
||||||
* From table 22-29 of the IPMI v2.0 spec
|
|
||||||
*/
|
|
||||||
struct get_channel_info_rsp {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved1 : 4;
|
|
||||||
uint8_t channel_number : 4; /* channel number */
|
|
||||||
#else
|
|
||||||
uint8_t channel_number : 4; /* channel number */
|
|
||||||
uint8_t __reserved1 : 4;
|
|
||||||
#endif
|
#endif
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved2 : 1;
|
|
||||||
uint8_t channel_medium : 7; /* Channel medium type per table 6-3 */
|
|
||||||
#else
|
|
||||||
uint8_t channel_medium : 7; /* Channel medium type per table 6-3 */
|
|
||||||
uint8_t __reserved2 : 1;
|
|
||||||
#endif
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved3 : 3;
|
|
||||||
uint8_t channel_protocol : 5; /* Channel protocol per table 6-2 */
|
|
||||||
#else
|
|
||||||
uint8_t channel_protocol : 5; /* Channel protocol per table 6-2 */
|
|
||||||
uint8_t __reserved3 : 3;
|
|
||||||
#endif
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t session_support : 2; /* Description of session support */
|
|
||||||
uint8_t active_sessions : 6; /* Count of active sessions */
|
|
||||||
#else
|
|
||||||
uint8_t active_sessions : 6; /* Count of active sessions */
|
|
||||||
uint8_t session_support : 2; /* Description of session support */
|
|
||||||
#endif
|
|
||||||
uint8_t vendor_id[3]; /* For OEM that specified the protocol */
|
|
||||||
uint8_t aux_info[2]; /* Not used*/
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
|
int _ipmi_get_channel_access(struct ipmi_intf *intf,
|
||||||
|
struct channel_access_t *channel_access,
|
||||||
/*
|
uint8_t get_volatile_settings);
|
||||||
* The Get Channel Access response structure
|
int ipmi_get_channel_cipher_suites(struct ipmi_intf *intf,
|
||||||
* From table 22-28 of the IPMI v2.0 spec
|
const char *payload_type,
|
||||||
*/
|
uint8_t channel,
|
||||||
struct get_channel_access_rsp {
|
struct cipher_suite_info *suites,
|
||||||
#if WORDS_BIGENDIAN
|
size_t *count);
|
||||||
uint8_t __reserved1 : 2;
|
int _ipmi_get_channel_info(struct ipmi_intf *intf,
|
||||||
uint8_t alerting : 1;
|
struct channel_info_t *channel_info);
|
||||||
uint8_t per_message_auth : 1;
|
int _ipmi_set_channel_access(struct ipmi_intf *intf,
|
||||||
uint8_t user_level_auth : 1;
|
struct channel_access_t channel_access,
|
||||||
uint8_t access_mode : 3;
|
uint8_t access_option,
|
||||||
#else
|
uint8_t privilege_option);
|
||||||
uint8_t access_mode : 3;
|
|
||||||
uint8_t user_level_auth : 1;
|
|
||||||
uint8_t per_message_auth : 1;
|
|
||||||
uint8_t alerting : 1;
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
#endif
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved2 : 4;
|
|
||||||
uint8_t channel_priv_limit : 4; /* Channel privilege level limit */
|
|
||||||
#else
|
|
||||||
uint8_t channel_priv_limit : 4; /* Channel privilege level limit */
|
|
||||||
uint8_t __reserved2 : 4;
|
|
||||||
#endif
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
|
|
||||||
struct get_user_access_rsp {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
uint8_t max_user_ids : 6;
|
|
||||||
uint8_t __reserved2 : 2;
|
|
||||||
uint8_t enabled_user_ids : 6;
|
|
||||||
uint8_t __reserved3 : 2;
|
|
||||||
uint8_t fixed_user_ids : 6;
|
|
||||||
uint8_t __reserved4 : 1;
|
|
||||||
uint8_t callin_callback : 1;
|
|
||||||
uint8_t link_auth : 1;
|
|
||||||
uint8_t ipmi_messaging : 1;
|
|
||||||
uint8_t privilege_limit : 4;
|
|
||||||
#else
|
|
||||||
uint8_t max_user_ids : 6;
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
uint8_t enabled_user_ids : 6;
|
|
||||||
uint8_t __reserved2 : 2;
|
|
||||||
uint8_t fixed_user_ids : 6;
|
|
||||||
uint8_t __reserved3 : 2;
|
|
||||||
uint8_t privilege_limit : 4;
|
|
||||||
uint8_t ipmi_messaging : 1;
|
|
||||||
uint8_t link_auth : 1;
|
|
||||||
uint8_t callin_callback : 1;
|
|
||||||
uint8_t __reserved4 : 1;
|
|
||||||
#endif
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
struct set_user_access_data {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t change_bits : 1;
|
|
||||||
uint8_t callin_callback : 1;
|
|
||||||
uint8_t link_auth : 1;
|
|
||||||
uint8_t ipmi_messaging : 1;
|
|
||||||
uint8_t channel : 4;
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
uint8_t user_id : 6;
|
|
||||||
uint8_t __reserved2 : 4;
|
|
||||||
uint8_t privilege_limit : 4;
|
|
||||||
uint8_t __reserved3 : 4;
|
|
||||||
uint8_t session_limit : 4;
|
|
||||||
#else
|
|
||||||
uint8_t channel : 4;
|
|
||||||
uint8_t ipmi_messaging : 1;
|
|
||||||
uint8_t link_auth : 1;
|
|
||||||
uint8_t callin_callback : 1;
|
|
||||||
uint8_t change_bits : 1;
|
|
||||||
uint8_t user_id : 6;
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
uint8_t privilege_limit : 4;
|
|
||||||
uint8_t __reserved2 : 4;
|
|
||||||
uint8_t session_limit : 4;
|
|
||||||
uint8_t __reserved3 : 4;
|
|
||||||
#endif
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
uint8_t ipmi_get_channel_medium(struct ipmi_intf * intf, uint8_t channel);
|
uint8_t ipmi_get_channel_medium(struct ipmi_intf * intf, uint8_t channel);
|
||||||
uint8_t ipmi_current_channel_medium(struct ipmi_intf * intf);
|
void ipmi_current_channel_info(struct ipmi_intf *intf,
|
||||||
|
struct channel_info_t *chinfo);
|
||||||
int ipmi_channel_main(struct ipmi_intf * intf, int argc, char ** argv);
|
int ipmi_channel_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
int ipmi_get_channel_auth_cap(struct ipmi_intf * intf, uint8_t channel, uint8_t priv);
|
int ipmi_get_channel_auth_cap(struct ipmi_intf * intf,
|
||||||
|
uint8_t channel, uint8_t priv);
|
||||||
int ipmi_get_channel_info(struct ipmi_intf * intf, uint8_t channel);
|
int ipmi_get_channel_info(struct ipmi_intf * intf, uint8_t channel);
|
||||||
|
|
||||||
#endif /*IPMI_CHANNEL_H*/
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_CHASSIS_H
|
#pragma once
|
||||||
#define IPMI_CHASSIS_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -51,5 +50,3 @@ int ipmi_chassis_power_status(struct ipmi_intf * intf);
|
|||||||
int ipmi_chassis_power_control(struct ipmi_intf * intf, uint8_t ctl);
|
int ipmi_chassis_power_control(struct ipmi_intf * intf, uint8_t ctl);
|
||||||
int ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv);
|
int ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
int ipmi_power_main(struct ipmi_intf * intf, int argc, char ** argv);
|
int ipmi_power_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
|
|
||||||
#endif /*IPMI_CHASSIS_H*/
|
|
@ -30,17 +30,15 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_CONSTANTS_H
|
#pragma once
|
||||||
#define IPMI_CONSTANTS_H
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* COMMANDS
|
* COMMANDS
|
||||||
*/
|
*/
|
||||||
#define IPMI_GET_SDR_REPOSITORY_INFO 0x20
|
#define IPMI_GET_SDR_REPOSITORY_INFO 0x20
|
||||||
#define IMPI_SOL_ACTIVATING 0x20
|
#define IPMI_SOL_ACTIVATING 0x20
|
||||||
#define IMPI_SET_SOL_CONFIG_PARAMETERS 0x21
|
#define IPMI_SET_SOL_CONFIG_PARAMETERS 0x21
|
||||||
#define IMPI_GET_SOL_CONFIG_PARAMETERS 0x22
|
#define IPMI_GET_SOL_CONFIG_PARAMETERS 0x22
|
||||||
#define IPMI_SET_USER_ACCESS 0x43
|
#define IPMI_SET_USER_ACCESS 0x43
|
||||||
#define IPMI_GET_USER_ACCESS 0x44
|
#define IPMI_GET_USER_ACCESS 0x44
|
||||||
#define IPMI_SET_USER_NAME 0x45
|
#define IPMI_SET_USER_NAME 0x45
|
||||||
@ -74,6 +72,7 @@
|
|||||||
#define IPMI_SESSION_PRIV_OPERATOR 0x3
|
#define IPMI_SESSION_PRIV_OPERATOR 0x3
|
||||||
#define IPMI_SESSION_PRIV_ADMIN 0x4
|
#define IPMI_SESSION_PRIV_ADMIN 0x4
|
||||||
#define IPMI_SESSION_PRIV_OEM 0x5
|
#define IPMI_SESSION_PRIV_OEM 0x5
|
||||||
|
#define IPMI_SESSION_PRIV_NOACCESS 0xF
|
||||||
|
|
||||||
#define IPMI_SET_IN_PROGRESS_SET_COMPLETE 0x00
|
#define IPMI_SET_IN_PROGRESS_SET_COMPLETE 0x00
|
||||||
#define IPMI_SET_IN_PROGRESS_IN_PROGRESS 0x01
|
#define IPMI_SET_IN_PROGRESS_IN_PROGRESS 0x01
|
||||||
@ -118,17 +117,17 @@
|
|||||||
#define IPMI_AUTH_RAKP_NONE 0x00
|
#define IPMI_AUTH_RAKP_NONE 0x00
|
||||||
#define IPMI_AUTH_RAKP_HMAC_SHA1 0x01
|
#define IPMI_AUTH_RAKP_HMAC_SHA1 0x01
|
||||||
#define IPMI_AUTH_RAKP_HMAC_MD5 0x02
|
#define IPMI_AUTH_RAKP_HMAC_MD5 0x02
|
||||||
|
#define IPMI_AUTH_RAKP_HMAC_SHA256 0x03
|
||||||
|
|
||||||
/* From table 13-18 of the IPMI v2 specification */
|
/* From table 13-18 of the IPMI v2 specification */
|
||||||
#define IPMI_INTEGRITY_NONE 0x00
|
#define IPMI_INTEGRITY_NONE 0x00
|
||||||
#define IPMI_INTEGRITY_HMAC_SHA1_96 0x01
|
#define IPMI_INTEGRITY_HMAC_SHA1_96 0x01
|
||||||
#define IPMI_INTEGRITY_HMAC_MD5_128 0x02
|
#define IPMI_INTEGRITY_HMAC_MD5_128 0x02
|
||||||
#define IPMI_INTEGRITY_MD5_128 0x03
|
#define IPMI_INTEGRITY_MD5_128 0x03
|
||||||
|
#define IPMI_INTEGRITY_HMAC_SHA256_128 0x04
|
||||||
|
|
||||||
/* From table 13-19 of the IPMI v2 specfication */
|
/* From table 13-19 of the IPMI v2 specification */
|
||||||
#define IPMI_CRYPT_NONE 0x00
|
#define IPMI_CRYPT_NONE 0x00
|
||||||
#define IPMI_CRYPT_AES_CBC_128 0x01
|
#define IPMI_CRYPT_AES_CBC_128 0x01
|
||||||
#define IPMI_CRYPT_XRC4_128 0x02
|
#define IPMI_CRYPT_XRC4_128 0x02
|
||||||
#define IPMI_CRYPT_XRC4_40 0x03
|
#define IPMI_CRYPT_XRC4_40 0x03
|
||||||
|
|
||||||
#endif /*IPMI_CONSTANTS_H*/
|
|
267
include/ipmitool/ipmi_dcmi.h
Normal file
267
include/ipmitool/ipmi_dcmi.h
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2008 Intel Corporation.
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
/* DCMI commands per DCMI 1.5 SPEC */
|
||||||
|
|
||||||
|
#define IPMI_DCMI 0xDC /* Group Extension Identification */
|
||||||
|
#define IPMI_DCMI_COMPAT 0x01
|
||||||
|
#define IPMI_DCMI_GETRED 0x02
|
||||||
|
#define IPMI_DCMI_GETLMT 0x03
|
||||||
|
#define IPMI_DCMI_SETLMT 0x04
|
||||||
|
#define IPMI_DCMI_PWRACT 0x05
|
||||||
|
#define IPMI_DCMI_GETASSET 0x06
|
||||||
|
#define IPMI_DCMI_SETASSET 0x08
|
||||||
|
#define IPMI_DCMI_GETMNGCTRLIDS 0x09
|
||||||
|
#define IPMI_DCMI_SETMNGCTRLIDS 0x0A
|
||||||
|
#define IPMI_DCMI_SETTERMALLIMIT 0x0B
|
||||||
|
#define IPMI_DCMI_GETTERMALLIMIT 0x0C
|
||||||
|
#define IPMI_DCMI_GETSNSR 0x07
|
||||||
|
#define IPMI_DCMI_PWRMGT 0x08
|
||||||
|
#define IPMI_DCMI_GETTEMPRED 0x10
|
||||||
|
#define IPMI_DCMI_SETCONFPARAM 0x12
|
||||||
|
#define IPMI_DCMI_GETCONFPARAM 0x13
|
||||||
|
|
||||||
|
#define IPMI_DCMI_CONFORM 0x0001
|
||||||
|
#define IPMI_DCMI_1_1_CONFORM 0x0101
|
||||||
|
#define IPMI_DCMI_1_5_CONFORM 0x0501
|
||||||
|
|
||||||
|
#define DCMI_MAX_BYTE_SIZE 0x10
|
||||||
|
#define DCMI_MAX_BYTE_TEMP_READ_SIZE 0x08
|
||||||
|
|
||||||
|
#define GOOD_PWR_GLIMIT_CCODE(ccode) ((ccode = ((ccode == 0x80) ? 0 : ccode)))
|
||||||
|
#define GOOD_ASSET_TAG_CCODE(ccode) ((ccode = (((ccode == 0x80) || (ccode == 0x81) || (ccode == 0x82) || (ccode == 0x83)) ? 0 : ccode)))
|
||||||
|
|
||||||
|
/* External Node Manager Configuration and Control Commands per spec 2.0 */
|
||||||
|
|
||||||
|
#define IPMI_NM_POLICY_CTL 0xC0
|
||||||
|
#define IPMI_NM_SET_POLICY 0xC1
|
||||||
|
#define IPMI_NM_GET_POLICY 0xC2
|
||||||
|
#define IPMI_NM_SET_ALERT_TH 0xC3
|
||||||
|
#define IPMI_NM_GET_ALERT_TH 0xC4
|
||||||
|
#define IPMI_NM_SET_SUSPEND 0xC5
|
||||||
|
#define IPMI_NM_GET_SUSPEND 0xC6
|
||||||
|
#define IPMI_NM_RESET_STATS 0xC7
|
||||||
|
#define IPMI_NM_GET_STATS 0xC8
|
||||||
|
#define IPMI_NM_GET_CAP 0xC9
|
||||||
|
#define IPMI_NM_GET_VERSION 0xCA
|
||||||
|
#define IPMI_NM_SET_POWER 0xCB
|
||||||
|
#define IPMI_NM_SET_ALERT_DS 0xCE
|
||||||
|
#define IPMI_NM_GET_ALERT_DS 0xCF
|
||||||
|
#define IPMI_NM_LIMITING 0xF2
|
||||||
|
|
||||||
|
/* Node Manager Policy Control Flags */
|
||||||
|
#define IPMI_NM_GLOBAL_ENABLE 0x01
|
||||||
|
#define IPMI_NM_DOMAIN_ENABLE 0x02
|
||||||
|
#define IPMI_NM_PER_POLICY_ENABLE 0x04
|
||||||
|
|
||||||
|
/* Node Manager Set Policy Enable */
|
||||||
|
#define IPMI_NM_POLICY_ENABLE 0x10
|
||||||
|
|
||||||
|
/* Node Manager Policy Trigger Codes */
|
||||||
|
#define IPMI_NM_NO_POLICY_TRIG 0x00
|
||||||
|
#define IPMI_NM_TEMP_TRIGGER 0x01
|
||||||
|
#define IPMI_NM_NO_READ_TRIG 0x02
|
||||||
|
#define IPMI_NM_RESET_TRIGGER 0x03
|
||||||
|
#define IPMI_NM_BOOT_TRIGGER 0x04
|
||||||
|
|
||||||
|
/* Policy Exception Actions flags */
|
||||||
|
#define IPMI_NM_POLICY_ALERT 0x01
|
||||||
|
#define IPMI_NM_POLICY_SHUT 0x02
|
||||||
|
|
||||||
|
/* Power Correction codes for Policy action */
|
||||||
|
#define IPMI_NM_PWR_AUTO_CORR 0x00
|
||||||
|
#define IPMI_NM_PWR_SOFT_CORR 0x01
|
||||||
|
#define IPMI_NM_PWR_AGGR_CORR 0x02
|
||||||
|
|
||||||
|
/* Set Threshold message size */
|
||||||
|
#define IPMI_NM_SET_THRESH_LEN 12
|
||||||
|
|
||||||
|
/* Number of Suspend Periods */
|
||||||
|
#define IPMI_NM_SUSPEND_PERIOD_MAX 5
|
||||||
|
|
||||||
|
struct dcmi_cmd {
|
||||||
|
uint16_t val;
|
||||||
|
const char * str;
|
||||||
|
const char * desc;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* make a struct for the return from the get limit command */
|
||||||
|
struct power_limit {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint16_t reserved_1; /* second and third bytes are reserved */
|
||||||
|
uint8_t action; /* fourth byte is the exception action */
|
||||||
|
uint16_t limit; /* fifth through sixth byte are the power limit in watts */
|
||||||
|
uint32_t correction; /* seventh - 10th bytes are the correction period */
|
||||||
|
uint16_t reserved_2; /* 11th - 12th are reserved bytes */
|
||||||
|
uint16_t sample; /* 13th - 14th are sample period time */
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* make a struct for the return from the reading command */
|
||||||
|
struct power_reading {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint16_t curr_pwr;
|
||||||
|
uint16_t min_sample;
|
||||||
|
uint16_t max_sample;
|
||||||
|
uint16_t avg_pwr;
|
||||||
|
uint32_t time_stamp; /* time since epoch */
|
||||||
|
uint32_t sample;
|
||||||
|
uint8_t state;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* make a struct for the return from the capabilities command */
|
||||||
|
struct capabilities {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint16_t conformance;
|
||||||
|
uint8_t revision;
|
||||||
|
uint8_t data_byte1;
|
||||||
|
uint8_t data_byte2;
|
||||||
|
uint8_t data_byte3;
|
||||||
|
uint8_t data_byte4;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* make a struct for the return from the sensor info command */
|
||||||
|
struct sensor_info {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint8_t i_instances;
|
||||||
|
uint8_t i_records;
|
||||||
|
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* make a struct for the return from the get asset tag command */
|
||||||
|
struct asset_tag {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint8_t length;
|
||||||
|
const char tag[16];
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* make a struct for the return from the set asset tag command */
|
||||||
|
struct set_asset_tag {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint8_t length;
|
||||||
|
const char tag[16];
|
||||||
|
uint8_t *data;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* make a struct for the return from the get thermal limit command */
|
||||||
|
struct thermal_limit {
|
||||||
|
uint8_t grp_id; /* first byte: Group Extension ID */
|
||||||
|
uint8_t exceptionActions;
|
||||||
|
uint8_t tempLimit;
|
||||||
|
uint16_t exceptionTime;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
int ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
|
|
||||||
|
/* Node Manager discover command */
|
||||||
|
struct nm_discover {
|
||||||
|
uint8_t intel_id[3]; /* Always returns 000157 */
|
||||||
|
uint8_t nm_version;
|
||||||
|
uint8_t ipmi_version;
|
||||||
|
uint8_t patch_version;
|
||||||
|
uint8_t major_rev;
|
||||||
|
uint8_t minor_rev;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager get capabilities command */
|
||||||
|
struct nm_capability {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint8_t max_settings;
|
||||||
|
uint16_t max_value; /* max power/thermal/time after reset */
|
||||||
|
uint16_t min_value; /* min "" */
|
||||||
|
uint32_t min_corr; /* min correction time inmillesecs */
|
||||||
|
uint32_t max_corr;
|
||||||
|
uint16_t min_stats;
|
||||||
|
uint16_t max_stats;
|
||||||
|
uint8_t scope;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager get statistics command */
|
||||||
|
struct nm_statistics {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint16_t curr_value;
|
||||||
|
uint16_t min_value;
|
||||||
|
uint16_t max_value;
|
||||||
|
uint16_t ave_value;
|
||||||
|
uint32_t time_stamp;
|
||||||
|
uint32_t stat_period;
|
||||||
|
uint8_t id_state;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager set policy */
|
||||||
|
struct nm_policy {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint8_t domain; /* 0:3 are domain, 4 = Policy enabled */
|
||||||
|
uint8_t policy_id;
|
||||||
|
uint8_t policy_type; /* 0:3 trigger type 4 = action 5:6 correction */
|
||||||
|
uint8_t policy_exception; /* exception actions */
|
||||||
|
uint16_t policy_limits;
|
||||||
|
uint32_t corr_time;
|
||||||
|
uint16_t trigger_limit;
|
||||||
|
uint16_t stats_period;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Maager get policy */
|
||||||
|
struct nm_get_policy {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint8_t domain; /* 0:3 are domain, 4 = Policy enabled */
|
||||||
|
uint8_t policy_type; /* 0:3 trigger type 4 = action 5:6 correction */
|
||||||
|
uint8_t policy_exception; /* exception actions */
|
||||||
|
uint16_t policy_limits;
|
||||||
|
uint32_t corr_time;
|
||||||
|
uint16_t trigger_limit;
|
||||||
|
uint16_t stats_period;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager set alert destination */
|
||||||
|
struct nm_set_alert {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint8_t chan; /* 0:3 BMC chan, 4:6 reserved, bit 7=0 register alert receiver =1 invalidate */
|
||||||
|
uint8_t dest; /* lan destination */
|
||||||
|
uint8_t string; /* alert string selector */
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager set alert threshold */
|
||||||
|
struct nm_thresh {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint8_t domain; /* 0:3 are domain, 4 = Policy enabled */
|
||||||
|
uint8_t policy_id;
|
||||||
|
uint8_t count;
|
||||||
|
uint16_t thresholds[3];
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager suspend period struct */
|
||||||
|
struct nm_period {
|
||||||
|
uint8_t start;
|
||||||
|
uint8_t stop;
|
||||||
|
uint8_t repeat;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* Node Manager set suspend period */
|
||||||
|
struct nm_suspend {
|
||||||
|
uint8_t intel_id[3];
|
||||||
|
uint8_t domain; /* 0:3 are domain, 4 = Policy enabled */
|
||||||
|
uint8_t policy_id;
|
||||||
|
uint8_t count;
|
||||||
|
struct nm_period period[IPMI_NM_SUSPEND_PERIOD_MAX];
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
int ipmi_nm_main(struct ipmi_intf * intf, int argc, char ** argv);
|
364
include/ipmitool/ipmi_delloem.h
Normal file
364
include/ipmitool/ipmi_delloem.h
Normal file
@ -0,0 +1,364 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
Copyright (c) 2008, Dell Inc
|
||||||
|
All rights reserved.
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
- Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
- Neither the name of Dell Inc nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
|
|
||||||
|
/* Dell selector for LCD control - get and set unless specified */
|
||||||
|
#define IPMI_DELL_LCD_STRING_SELECTOR 0xC1 /* RW get/set the user string */
|
||||||
|
#define IPMI_DELL_LCD_CONFIG_SELECTOR 0xC2 /* RW set to user/default/none */
|
||||||
|
#define IPMI_DELL_LCD_GET_CAPS_SELECTOR 0xCF /* RO use when available*/
|
||||||
|
#define IPMI_DELL_LCD_STRINGEX_SELECTOR 0xD0 /* RW get/set the user string use first when available*/
|
||||||
|
#define IPMI_DELL_LCD_STATUS_SELECTOR 0xE7 /* LCD string when config set to default.*/
|
||||||
|
#define IPMI_DELL_PLATFORM_MODEL_NAME_SELECTOR 0xD1 /* LCD string when config set to default.*/
|
||||||
|
|
||||||
|
/* Dell defines for picking which string to use */
|
||||||
|
#define IPMI_DELL_LCD_CONFIG_USER_DEFINED 0x00 /* use string set by user*/
|
||||||
|
#define IPMI_DELL_LCD_CONFIG_DEFAULT 0x01 /* use platform model name*/
|
||||||
|
#define IPMI_DELL_LCD_CONFIG_NONE 0x02 /* blank*/
|
||||||
|
#define IPMI_DELL_LCD_iDRAC_IPV4ADRESS 0x04 /* use string set by user*/
|
||||||
|
#define IPMI_DELL_LCD_IDRAC_MAC_ADDRESS 0x08 /* use platform model name*/
|
||||||
|
#define IPMI_DELL_LCD_OS_SYSTEM_NAME 0x10 /* blank*/
|
||||||
|
|
||||||
|
#define IPMI_DELL_LCD_SERVICE_TAG 0x20 /* use string set by user*/
|
||||||
|
#define IPMI_DELL_LCD_iDRAC_IPV6ADRESS 0x40 /* use string set by user*/
|
||||||
|
#define IPMI_DELL_LCD_AMBEINT_TEMP 0x80 /* use platform model name*/
|
||||||
|
#define IPMI_DELL_LCD_SYSTEM_WATTS 0x100 /* blank*/
|
||||||
|
#define IPMI_DELL_LCD_ASSET_TAG 0x200
|
||||||
|
|
||||||
|
#define IPMI_DELL_LCD_ERROR_DISP_SEL 0x01 /* use platform model name*/
|
||||||
|
#define IPMI_DELL_LCD_ERROR_DISP_VERBOSE 0x02 /* blank*/
|
||||||
|
|
||||||
|
#define IPMI_DELL_IDRAC_VALIDATOR 0xDD
|
||||||
|
#define IPMI_DELL_POWER_CAP_STATUS 0xBA
|
||||||
|
#define IPMI_DELL_AVG_POWER_CONSMP_HST 0xEB
|
||||||
|
#define IPMI_DELL_PEAK_POWER_CONSMP_HST 0xEC
|
||||||
|
#define SYSTEM_BOARD_SYSTEM_LEVEL_SENSOR_NUM 0x98
|
||||||
|
|
||||||
|
#define IDRAC_11G 1
|
||||||
|
#define IDRAC_12G 2
|
||||||
|
#define IDRAC_13G 3
|
||||||
|
// Return Error code for license
|
||||||
|
#define LICENSE_NOT_SUPPORTED 0x6F
|
||||||
|
#define VFL_NOT_LICENSED 0x33
|
||||||
|
#define btuphr 0x01
|
||||||
|
#define watt 0x00
|
||||||
|
#define IPMI_DELL_POWER_CAP 0xEA
|
||||||
|
#define percent 0x03
|
||||||
|
|
||||||
|
/* Not on all Dell servers. If there, use it.*/
|
||||||
|
typedef struct _tag_ipmi_dell_lcd_caps
|
||||||
|
{
|
||||||
|
uint8_t parm_rev; /* 0x11 for IPMI 2.0 */
|
||||||
|
uint8_t char_set; /* always 1 for printable ASCII 0x20-0x7E */
|
||||||
|
uint8_t number_lines; /* 0-4, 1 for 9G. 10G tbd */
|
||||||
|
uint8_t max_chars[4]; /* 62 for triathlon, 0 if not present (glacier) */
|
||||||
|
/* [0] is max chars for line 1 */
|
||||||
|
}IPMI_DELL_LCD_CAPS;
|
||||||
|
|
||||||
|
#define IPMI_DELL_LCD_STRING_LENGTH_MAX 62 /* Valid for 9G. Glacier ??. */
|
||||||
|
#define IPMI_DELL_LCD_STRING1_SIZE 14
|
||||||
|
#define IPMI_DELL_LCD_STRINGN_SIZE 16
|
||||||
|
|
||||||
|
/* vFlash subcommands */
|
||||||
|
#define IPMI_GET_EXT_SD_CARD_INFO 0xA4
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _tag_ipmi_dell_lcd_string
|
||||||
|
{
|
||||||
|
uint8_t parm_rev; /* 0x11 for IPMI 2.0 */
|
||||||
|
uint8_t data_block_selector; /* 16-byte data block number to access, 0 based.*/
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t encoding : 4; /* 0 is printable ASCII 7-bit */
|
||||||
|
uint8_t length; /* 0 to max chars from lcd caps */
|
||||||
|
uint8_t data[IPMI_DELL_LCD_STRING1_SIZE]; /* not zero terminated. */
|
||||||
|
}selector_0_string;
|
||||||
|
uint8_t selector_n_data[IPMI_DELL_LCD_STRINGN_SIZE];
|
||||||
|
}lcd_string;
|
||||||
|
} __attribute__ ((packed)) IPMI_DELL_LCD_STRING;
|
||||||
|
|
||||||
|
/* Only found on servers with more than 1 line. Use if available. */
|
||||||
|
typedef struct _tag_ipmi_dell_lcd_stringex
|
||||||
|
{
|
||||||
|
uint8_t parm_rev; /* 0x11 for IPMI 2.0 */
|
||||||
|
uint8_t line_number; /* LCD line number 1 to 4 */
|
||||||
|
uint8_t data_block_selector; /* 16-byte data block number to access, 0 based.*/
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t encoding : 4; /* 0 is printable ASCII 7-bit */
|
||||||
|
uint8_t length; /* 0 to max chars from lcd caps */
|
||||||
|
uint8_t data[IPMI_DELL_LCD_STRING1_SIZE]; /* not zero terminated. */
|
||||||
|
} selector_0_string;
|
||||||
|
uint8_t selector_n_data[IPMI_DELL_LCD_STRINGN_SIZE];
|
||||||
|
} lcd_string;
|
||||||
|
} __attribute__ ((packed)) IPMI_DELL_LCD_STRINGEX;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _lcd_status
|
||||||
|
{
|
||||||
|
char parametersel;
|
||||||
|
char vKVM_status;
|
||||||
|
char lock_status;
|
||||||
|
char Resv1;
|
||||||
|
char Resv;
|
||||||
|
} __attribute__ ((packed)) LCD_STATUS;
|
||||||
|
|
||||||
|
typedef struct _lcd_mode
|
||||||
|
{
|
||||||
|
uint8_t parametersel;
|
||||||
|
uint32_t lcdmode;
|
||||||
|
uint16_t lcdquallifier;
|
||||||
|
uint32_t capabilites;
|
||||||
|
uint8_t error_display;
|
||||||
|
uint8_t Resv;
|
||||||
|
} __attribute__ ((packed)) LCD_MODE;
|
||||||
|
|
||||||
|
#define PARAM_REV_OFFSET (uint8_t)(0x1)
|
||||||
|
#define VIRTUAL_MAC_OFFSET (uint8_t)(0x1)
|
||||||
|
|
||||||
|
#define LOM_MACTYPE_ETHERNET 0
|
||||||
|
#define LOM_MACTYPE_ISCSI 1
|
||||||
|
#define LOM_MACTYPE_RESERVED 3
|
||||||
|
|
||||||
|
#define LOM_ETHERNET_ENABLED 0
|
||||||
|
#define LOM_ETHERNET_DISABLED 1
|
||||||
|
#define LOM_ETHERNET_PLAYINGDEAD 2
|
||||||
|
#define LOM_ETHERNET_RESERVED 3
|
||||||
|
|
||||||
|
#define LOM_ACTIVE 1
|
||||||
|
#define LOM_INACTIVE 0
|
||||||
|
|
||||||
|
#define MACADDRESSLENGH 6
|
||||||
|
#define MAX_LOM 8
|
||||||
|
|
||||||
|
|
||||||
|
#define EMB_NIC_MAC_ADDRESS_11G (uint8_t)(0xDA)
|
||||||
|
#define EMB_NIC_MAC_ADDRESS_9G_10G (uint8_t)(0xCB)
|
||||||
|
|
||||||
|
#define IMC_IDRAC_10G (uint8_t) (0x08)
|
||||||
|
#define IMC_CMC (uint8_t) (0x09)
|
||||||
|
#define IMC_IDRAC_11G_MONOLITHIC (uint8_t) (0x0A)
|
||||||
|
#define IMC_IDRAC_11G_MODULAR (uint8_t) (0x0B)
|
||||||
|
#define IMC_UNUSED (uint8_t) (0x0C)
|
||||||
|
#define IMC_MASER_LITE_BMC (uint8_t) (0x0D)
|
||||||
|
#define IMC_MASER_LITE_NU (uint8_t) (0x0E)
|
||||||
|
#define IMC_IDRAC_12G_MONOLITHIC (uint8_t) (0x10)
|
||||||
|
#define IMC_IDRAC_12G_MODULAR (uint8_t) (0x11)
|
||||||
|
|
||||||
|
#define IMC_IDRAC_13G_MONOLITHIC (uint8_t) (0x20)
|
||||||
|
#define IMC_IDRAC_13G_MODULAR (uint8_t) (0x21)
|
||||||
|
#define IMC_IDRAC_13G_DCS (uint8_t) (0x22)
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int BladSlotNumber : 4;
|
||||||
|
unsigned int MacType : 2;
|
||||||
|
unsigned int EthernetStatus : 2;
|
||||||
|
unsigned int NICNumber : 5;
|
||||||
|
unsigned int Reserved : 3;
|
||||||
|
uint8_t MacAddressByte[MACADDRESSLENGH];
|
||||||
|
} LOMMacAddressType;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
LOMMacAddressType LOMMacAddress [MAX_LOM];
|
||||||
|
} EmbeddedNICMacAddressType;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t MacAddressByte[MACADDRESSLENGH];
|
||||||
|
} MacAddressType;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
MacAddressType MacAddress [MAX_LOM];
|
||||||
|
} EmbeddedNICMacAddressType_10G;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define TRANSPORT_NETFN (uint8_t)(0xc)
|
||||||
|
#define GET_LAN_PARAM_CMD (uint8_t)(0x02)
|
||||||
|
#define MAC_ADDR_PARAM (uint8_t)(0x05)
|
||||||
|
#define LAN_CHANNEL_NUMBER (uint8_t)(0x01)
|
||||||
|
|
||||||
|
#define IDRAC_NIC_NUMBER (uint8_t)(0x8)
|
||||||
|
|
||||||
|
#define TOTAL_N0_NICS_INDEX (uint8_t)(0x1)
|
||||||
|
|
||||||
|
|
||||||
|
// 12g supported
|
||||||
|
#define SET_NIC_SELECTION_12G_CMD (uint8_t)(0x28)
|
||||||
|
#define GET_NIC_SELECTION_12G_CMD (uint8_t)(0x29)
|
||||||
|
|
||||||
|
// 11g supported
|
||||||
|
#define SET_NIC_SELECTION_CMD (uint8_t)(0x24)
|
||||||
|
#define GET_NIC_SELECTION_CMD (uint8_t)(0x25)
|
||||||
|
#define GET_ACTIVE_NIC_CMD (uint8_t)(0xc1)
|
||||||
|
#define POWER_EFFICENCY_CMD (uint8_t)(0xc0)
|
||||||
|
#define SERVER_POWER_CONSUMPTION_CMD (uint8_t)(0x8F)
|
||||||
|
|
||||||
|
#define POWER_SUPPLY_INFO (uint8_t)(0xb0)
|
||||||
|
#define IPMI_ENTITY_ID_POWER_SUPPLY (uint8_t)(0x0a)
|
||||||
|
#define SENSOR_STATE_STR_SIZE (uint8_t)(64)
|
||||||
|
#define SENSOR_NAME_STR_SIZE (uint8_t)(64)
|
||||||
|
|
||||||
|
#define GET_PWRMGMT_INFO_CMD (uint8_t)(0x9C)
|
||||||
|
#define CLEAR_PWRMGMT_INFO_CMD (uint8_t)(0x9D)
|
||||||
|
#define GET_PWR_HEADROOM_CMD (uint8_t)(0xBB)
|
||||||
|
#define GET_PWR_CONSUMPTION_CMD (uint8_t)(0xB3)
|
||||||
|
#define GET_FRONT_PANEL_INFO_CMD (uint8_t)0xb5
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _ipmi_power_monitor
|
||||||
|
{
|
||||||
|
uint32_t cumStartTime;
|
||||||
|
uint32_t cumReading;
|
||||||
|
uint32_t maxPeakStartTime;
|
||||||
|
uint32_t ampPeakTime;
|
||||||
|
uint16_t ampReading;
|
||||||
|
uint32_t wattPeakTime;
|
||||||
|
uint16_t wattReading;
|
||||||
|
} __attribute__ ((packed)) IPMI_POWER_MONITOR;
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_POWER_FW_VERSION 8
|
||||||
|
|
||||||
|
typedef struct _ipmi_power_supply_infoo
|
||||||
|
{
|
||||||
|
/*No param_rev it is not a System Information Command */
|
||||||
|
uint16_t ratedWatts;
|
||||||
|
uint16_t ratedAmps;
|
||||||
|
uint16_t ratedVolts;
|
||||||
|
uint32_t vendorid;
|
||||||
|
uint8_t FrimwareVersion[MAX_POWER_FW_VERSION];
|
||||||
|
uint8_t Powersupplytype;
|
||||||
|
uint16_t ratedDCWatts;
|
||||||
|
uint16_t Resv;
|
||||||
|
|
||||||
|
} __attribute__ ((packed)) IPMI_POWER_SUPPLY_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ipmi_power_consumption_data
|
||||||
|
{
|
||||||
|
uint16_t actualpowerconsumption;
|
||||||
|
uint16_t powerthreshold;
|
||||||
|
uint16_t warningthreshold;
|
||||||
|
uint8_t throttlestate;
|
||||||
|
uint16_t maxpowerconsumption;
|
||||||
|
uint16_t throttlepowerconsumption;
|
||||||
|
uint16_t Resv;
|
||||||
|
} __attribute__ ((packed)) IPMI_POWER_CONSUMPTION_DATA;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ipmi_inst_power_consumption_data
|
||||||
|
{
|
||||||
|
uint16_t instanpowerconsumption;
|
||||||
|
uint16_t instanApms;
|
||||||
|
uint16_t resv1;
|
||||||
|
uint8_t resv;
|
||||||
|
} __attribute__ ((packed)) IPMI_INST_POWER_CONSUMPTION_DATA;
|
||||||
|
|
||||||
|
typedef struct _ipmi_avgpower_consump_histroy
|
||||||
|
{
|
||||||
|
uint8_t parameterselector;
|
||||||
|
uint16_t lastminutepower;
|
||||||
|
uint16_t lasthourpower;
|
||||||
|
uint16_t lastdaypower;
|
||||||
|
uint16_t lastweakpower;
|
||||||
|
|
||||||
|
} __attribute__ ((packed)) IPMI_AVGPOWER_CONSUMP_HISTORY;
|
||||||
|
|
||||||
|
typedef struct _ipmi_power_consump_histroy
|
||||||
|
{
|
||||||
|
uint8_t parameterselector;
|
||||||
|
uint16_t lastminutepower;
|
||||||
|
uint16_t lasthourpower;
|
||||||
|
uint16_t lastdaypower;
|
||||||
|
uint16_t lastweakpower;
|
||||||
|
uint32_t lastminutepowertime;
|
||||||
|
uint32_t lasthourpowertime;
|
||||||
|
uint32_t lastdaypowertime;
|
||||||
|
uint32_t lastweekpowertime;
|
||||||
|
} __attribute__ ((packed)) IPMI_POWER_CONSUMP_HISTORY;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _ipmi_delloem_power_cap
|
||||||
|
{
|
||||||
|
uint8_t parameterselector;
|
||||||
|
uint16_t PowerCap;
|
||||||
|
uint8_t unit;
|
||||||
|
uint16_t MaximumPowerConsmp;
|
||||||
|
uint16_t MinimumPowerConsmp;
|
||||||
|
uint16_t totalnumpowersupp;
|
||||||
|
uint16_t AvailablePower ;
|
||||||
|
uint16_t SystemThrottling;
|
||||||
|
uint16_t Resv;
|
||||||
|
} __attribute__ ((packed)) IPMI_POWER_CAP;
|
||||||
|
|
||||||
|
typedef struct _power_headroom
|
||||||
|
{
|
||||||
|
uint16_t instheadroom;
|
||||||
|
uint16_t peakheadroom;
|
||||||
|
} __attribute__ ((packed)) POWER_HEADROOM;
|
||||||
|
|
||||||
|
typedef struct ipmi_vFlash_extended_info
|
||||||
|
{
|
||||||
|
uint8_t vflashcompcode;
|
||||||
|
uint8_t sdcardstatus;
|
||||||
|
uint32_t sdcardsize;
|
||||||
|
uint32_t sdcardavailsize;
|
||||||
|
uint8_t bootpartion;
|
||||||
|
uint8_t Resv;
|
||||||
|
} __attribute__ ((packed)) IPMI_DELL_SDCARD_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _SensorReadingType
|
||||||
|
{
|
||||||
|
uint8_t sensorReading;
|
||||||
|
uint8_t sensorFlags;
|
||||||
|
uint16_t sensorState;
|
||||||
|
}SensorReadingType;
|
||||||
|
uint16_t compareinputwattage(IPMI_POWER_SUPPLY_INFO* powersupplyinfo, uint16_t inputwattage);
|
||||||
|
int ipmi_delloem_main(struct ipmi_intf * intf, int argc, char ** argv);
|
65
include/ipmitool/ipmi_ekanalyzer.h
Normal file
65
include/ipmitool/ipmi_ekanalyzer.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2007 Kontron Canada, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Base on code from
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_fru.h>
|
||||||
|
|
||||||
|
#define RTM_FRU_FILE 0x00
|
||||||
|
#define A1_AMC_FRU_FILE 0x01
|
||||||
|
#define A2_AMC_FRU_FILE 0x02
|
||||||
|
#define A3_AMC_FRU_FILE 0x03
|
||||||
|
#define A4_AMC_FRU_FILE 0x04
|
||||||
|
#define B1_AMC_FRU_FILE 0x05
|
||||||
|
#define B2_AMC_FRU_FILE 0x06
|
||||||
|
#define B3_AMC_FRU_FILE 0x07
|
||||||
|
#define B4_AMC_FRU_FILE 0x08
|
||||||
|
#define ON_CARRIER_FRU_FILE 0x09
|
||||||
|
#define CONFIG_FILE 0x0A
|
||||||
|
#define SHELF_MANAGER_FRU_FILE 0x0B
|
||||||
|
|
||||||
|
#define MIN_ARGUMENT 0x02
|
||||||
|
#define RTM_IPMB_L 0x90
|
||||||
|
|
||||||
|
#define MAX_FILE_NUMBER 8
|
||||||
|
/* this voltag is specified in AMC.0 specification Table 3-10 */
|
||||||
|
#define AMC_VOLTAGE 12 /*volts*/
|
||||||
|
|
||||||
|
#define SIZE_OF_GUID 16
|
||||||
|
#define FRU_RADIAL_IPMB0_LINK_MAPPING 0x15
|
||||||
|
|
||||||
|
int ipmi_ekanalyzer_main(struct ipmi_intf *, int, char **);
|
@ -30,9 +30,11 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_ENTITY_H
|
#pragma once
|
||||||
#define IPMI_ENTITY_H
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct entity_id {
|
struct entity_id {
|
||||||
uint8_t id; /* physical entity id */
|
uint8_t id; /* physical entity id */
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
@ -42,6 +44,7 @@ struct entity_id {
|
|||||||
uint8_t instance : 7; /* instance number */
|
uint8_t instance : 7; /* instance number */
|
||||||
uint8_t logical : 1; /* physical/logical */
|
uint8_t logical : 1; /* physical/logical */
|
||||||
#endif
|
#endif
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
#endif /* IPMI_ENTITY_H */
|
#pragma pack(0)
|
||||||
|
#endif
|
@ -30,67 +30,61 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_HELPER_H
|
#pragma once
|
||||||
#define IPMI_HELPER_H
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#if HAVE_CONFIG_H
|
||||||
#include <inttypes.h>
|
# include <config.h>
|
||||||
#include <stdio.h>
|
#endif
|
||||||
#include <string.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
#ifndef TRUE
|
#define EVENT_DIR_ASSERT 0
|
||||||
#define TRUE 1
|
#define EVENT_DIR_DEASSERT 1
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct platform_event_msg {
|
||||||
|
uint8_t evm_rev;
|
||||||
|
uint8_t sensor_type;
|
||||||
|
uint8_t sensor_num;
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint8_t event_dir : 1;
|
||||||
|
uint8_t event_type : 7;
|
||||||
|
#else
|
||||||
|
uint8_t event_type : 7;
|
||||||
|
uint8_t event_dir : 1;
|
||||||
|
#endif
|
||||||
|
uint8_t event_data[3];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FALSE
|
/* See IPMI 2.0 Specification, Appendix G, Table G-1, "Event Commands" */
|
||||||
#define FALSE 0
|
typedef enum {
|
||||||
#endif
|
IPMI_CMD_SET_EVENT_RCVR = 0,
|
||||||
|
IPMI_CMD_GET_EVENT_RCVR,
|
||||||
|
IPMI_CMD_PLATFORM_EVENT
|
||||||
|
} ipmi_event_cmd_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PLATFORM_EVENT_DATA_LEN_NON_SI = sizeof(struct platform_event_msg),
|
||||||
|
PLATFORM_EVENT_DATA_LEN_SI, /* System interfaces require generator ID */
|
||||||
|
PLATFORM_EVENT_DATA_LEN_MAX = PLATFORM_EVENT_DATA_LEN_SI
|
||||||
|
} ipmi_platform_event_data_len_t;
|
||||||
|
|
||||||
struct ipmi_intf;
|
/* See Table 5-4 */
|
||||||
|
typedef enum {
|
||||||
|
EVENT_SWID_BIOS_BASE = 0x00, /* BIOS */
|
||||||
|
EVENT_SWID_SMI_BASE = 0x10, /* SMI Handler */
|
||||||
|
EVENT_SWID_SMS_BASE = 0x20, /* System Management Software */
|
||||||
|
EVENT_SWID_OEM_BASE = 0x30, /* OEM */
|
||||||
|
EVENT_SWID_REMOTE_CONSOLE_BASE = 0x40, /* Remote Console SW */
|
||||||
|
EVENT_SWID_TERMINAL_MODE_BASE = 0x47 /* Terminal Mode RC SW */
|
||||||
|
} ipmi_event_swid_t;
|
||||||
|
#define EVENT_SWID(base, index) ((EVENT_SWID_##base##_BASE + index) & 0x7F)
|
||||||
|
|
||||||
struct valstr {
|
/* See Figure 29-2, Table 32-1 */
|
||||||
uint16_t val;
|
#define EVENT_GENERATOR(base, index) (EVENT_SWID(base,index) << 1 | 1)
|
||||||
const char * str;
|
|
||||||
};
|
|
||||||
struct oemvalstr {
|
|
||||||
uint16_t oem;
|
|
||||||
uint16_t val;
|
|
||||||
const char * str;
|
|
||||||
};
|
|
||||||
|
|
||||||
const char * val2str(uint16_t val, const struct valstr * vs);
|
int ipmi_event_main(struct ipmi_intf *, int, char **);
|
||||||
const char * oemval2str(uint16_t oem,uint16_t val, const struct oemvalstr * vs);
|
|
||||||
uint16_t str2val(const char * str, const struct valstr * vs);
|
|
||||||
void print_valstr(const struct valstr * vs, const char * title, int loglevel);
|
|
||||||
void print_valstr_2col(const struct valstr * vs, const char * title, int loglevel);
|
|
||||||
|
|
||||||
|
|
||||||
uint16_t buf2short(uint8_t * buf);
|
|
||||||
uint32_t buf2long(uint8_t * buf);
|
|
||||||
const char * buf2str(uint8_t * buf, int len);
|
|
||||||
void printbuf(const uint8_t * buf, int len, const char * desc);
|
|
||||||
uint8_t ipmi_csum(uint8_t * d, int s);
|
|
||||||
FILE * ipmi_open_file(const char * file, int rw);
|
|
||||||
void ipmi_start_daemon(struct ipmi_intf *intf);
|
|
||||||
|
|
||||||
#define ipmi_open_file_read(file) ipmi_open_file(file, 0)
|
|
||||||
#define ipmi_open_file_write(file) ipmi_open_file(file, 1)
|
|
||||||
|
|
||||||
#ifndef __min
|
|
||||||
# define __min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __max
|
|
||||||
# define __max(a, b) ((a) > (b) ? (a) : (b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __minlen
|
|
||||||
# define __minlen(a, b) ({ int x=strlen(a); int y=strlen(b); (x < y) ? x : y;})
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __maxlen
|
|
||||||
# define __maxlen(a, b) ({ int x=strlen(a); int y=strlen(b); (x > y) ? x : y;})
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* IPMI_HELPER_H */
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_FIREWALL_H
|
#pragma once
|
||||||
#define IPMI_FIREWALL_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -102,5 +101,3 @@ static inline int bit_test(const unsigned char * bf, int n) {
|
|||||||
static inline void bit_set(unsigned char * bf, int n, int v) {
|
static inline void bit_set(unsigned char * bf, int n, int v) {
|
||||||
bf[n>>3] = (bf[n>>3] & ~(1<<(n%8))) | ((v?1:0)<<(n%8));
|
bf[n>>3] = (bf[n>>3] & ~(1<<(n%8))) | ((v?1:0)<<(n%8));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /*IPMI_FIREWALL_H */
|
|
664
include/ipmitool/ipmi_fru.h
Normal file
664
include/ipmitool/ipmi_fru.h
Normal file
@ -0,0 +1,664 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_sdr.h>
|
||||||
|
#include <ipmitool/ipmi_time.h>
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FRU_END_OF_FIELDS 0xc1
|
||||||
|
|
||||||
|
#define GET_FRU_INFO 0x10
|
||||||
|
#define GET_FRU_DATA 0x11
|
||||||
|
#define SET_FRU_DATA 0x12
|
||||||
|
|
||||||
|
enum {
|
||||||
|
FRU_CHASSIS_PARTNO,
|
||||||
|
FRU_CHASSIS_SERIAL,
|
||||||
|
FRU_BOARD_MANUF,
|
||||||
|
FRU_BOARD_PRODUCT,
|
||||||
|
FRU_BOARD_SERIAL,
|
||||||
|
FRU_BOARD_PARTNO,
|
||||||
|
FRU_PRODUCT_MANUF,
|
||||||
|
FRU_PRODUCT_NAME,
|
||||||
|
FRU_PRODUCT_PARTNO,
|
||||||
|
FRU_PRODUCT_VERSION,
|
||||||
|
FRU_PRODUCT_SERIAL,
|
||||||
|
FRU_PRODUCT_ASSET,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fru_info {
|
||||||
|
uint16_t size;
|
||||||
|
uint8_t access:1;
|
||||||
|
uint8_t max_read_size;
|
||||||
|
uint8_t max_write_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_header {
|
||||||
|
uint8_t version;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint8_t internal;
|
||||||
|
uint8_t chassis;
|
||||||
|
uint8_t board;
|
||||||
|
uint8_t product;
|
||||||
|
uint8_t multi;
|
||||||
|
} offset;
|
||||||
|
uint8_t offsets[5];
|
||||||
|
};
|
||||||
|
uint8_t pad;
|
||||||
|
uint8_t checksum;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct fru_area_chassis {
|
||||||
|
uint8_t area_ver;
|
||||||
|
uint8_t type;
|
||||||
|
uint16_t area_len;
|
||||||
|
char * part;
|
||||||
|
char * serial;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fru_area_board {
|
||||||
|
uint8_t area_ver;
|
||||||
|
uint8_t lang;
|
||||||
|
uint16_t area_len;
|
||||||
|
uint32_t mfg_date_time;
|
||||||
|
char * mfg;
|
||||||
|
char * prod;
|
||||||
|
char * serial;
|
||||||
|
char * part;
|
||||||
|
char * fru;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fru_area_product {
|
||||||
|
uint8_t area_ver;
|
||||||
|
uint8_t lang;
|
||||||
|
uint16_t area_len;
|
||||||
|
char * mfg;
|
||||||
|
char * name;
|
||||||
|
char * part;
|
||||||
|
char * version;
|
||||||
|
char * serial;
|
||||||
|
char * asset;
|
||||||
|
char * fru;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
/* See Table 16-1 of "IPMI FRU Information Storage Specification" */
|
||||||
|
struct fru_multirec_header {
|
||||||
|
#define FRU_RECORD_TYPE_POWER_SUPPLY_INFORMATION 0x00
|
||||||
|
#define FRU_RECORD_TYPE_DC_OUTPUT 0x01
|
||||||
|
#define FRU_RECORD_TYPE_DC_LOAD 0x02
|
||||||
|
#define FRU_RECORD_TYPE_MANAGEMENT_ACCESS 0x03
|
||||||
|
#define FRU_RECORD_TYPE_BASE_COMPATIBILITY 0x04
|
||||||
|
#define FRU_RECORD_TYPE_EXTENDED_COMPATIBILITY 0x05
|
||||||
|
#define FRU_RECORD_TYPE_OEM_EXTENSION 0xc0
|
||||||
|
uint8_t type;
|
||||||
|
#define FRU_RECORD_FORMAT_EOL_MASK 0x80
|
||||||
|
#define FRU_RECORD_FORMAT_VER_MASK 0x0F
|
||||||
|
uint8_t format;
|
||||||
|
uint8_t len;
|
||||||
|
uint8_t record_checksum;
|
||||||
|
uint8_t header_checksum;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_multirec_powersupply {
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint16_t capacity;
|
||||||
|
#else
|
||||||
|
uint16_t capacity:12;
|
||||||
|
uint16_t __reserved1:4;
|
||||||
|
#endif
|
||||||
|
uint16_t peak_va;
|
||||||
|
uint8_t inrush_current;
|
||||||
|
uint8_t inrush_interval;
|
||||||
|
uint16_t lowend_input1;
|
||||||
|
uint16_t highend_input1;
|
||||||
|
uint16_t lowend_input2;
|
||||||
|
uint16_t highend_input2;
|
||||||
|
uint8_t lowend_freq;
|
||||||
|
uint8_t highend_freq;
|
||||||
|
uint8_t dropout_tolerance;
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint8_t __reserved2:3;
|
||||||
|
uint8_t tach:1;
|
||||||
|
uint8_t hotswap:1;
|
||||||
|
uint8_t autoswitch:1;
|
||||||
|
uint8_t pfc:1;
|
||||||
|
uint8_t predictive_fail:1;
|
||||||
|
#else
|
||||||
|
uint8_t predictive_fail:1;
|
||||||
|
uint8_t pfc:1;
|
||||||
|
uint8_t autoswitch:1;
|
||||||
|
uint8_t hotswap:1;
|
||||||
|
uint8_t tach:1;
|
||||||
|
uint8_t __reserved2:3;
|
||||||
|
#endif
|
||||||
|
uint16_t peak_cap_ht;
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint8_t combined_voltage1:4;
|
||||||
|
uint8_t combined_voltage2:4;
|
||||||
|
#else
|
||||||
|
uint8_t combined_voltage2:4;
|
||||||
|
uint8_t combined_voltage1:4;
|
||||||
|
#endif
|
||||||
|
uint16_t combined_capacity;
|
||||||
|
uint8_t rps_threshold;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_multirec_dcoutput {
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint8_t standby:1;
|
||||||
|
uint8_t __reserved:3;
|
||||||
|
uint8_t output_number:4;
|
||||||
|
#else
|
||||||
|
uint8_t output_number:4;
|
||||||
|
uint8_t __reserved:3;
|
||||||
|
uint8_t standby:1;
|
||||||
|
#endif
|
||||||
|
short nominal_voltage;
|
||||||
|
short max_neg_dev;
|
||||||
|
short max_pos_dev;
|
||||||
|
uint16_t ripple_and_noise;
|
||||||
|
uint16_t min_current;
|
||||||
|
uint16_t max_current;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_multirec_dcload {
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint8_t __reserved:4;
|
||||||
|
uint8_t output_number:4;
|
||||||
|
#else
|
||||||
|
uint8_t output_number:4;
|
||||||
|
uint8_t __reserved:4;
|
||||||
|
#endif
|
||||||
|
short nominal_voltage;
|
||||||
|
short min_voltage;
|
||||||
|
short max_voltage;
|
||||||
|
uint16_t ripple_and_noise;
|
||||||
|
uint16_t min_current;
|
||||||
|
uint16_t max_current;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(push, 1)
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* In accordance with Table 18-7 of "IPMI Platform Management FRU Information
|
||||||
|
* Storage Definition v1.0"
|
||||||
|
*/
|
||||||
|
struct fru_multirec_mgmt {
|
||||||
|
#define FRU_MULTIREC_MGMT_SUBTYPE_MIN 0x01
|
||||||
|
#define FRU_MULTIREC_MGMT_SUBTYPE_MAX 0x07
|
||||||
|
uint8_t subtype;
|
||||||
|
#define FRU_MULTIREC_MGMT_SYSURL 0x01
|
||||||
|
#define FRU_MULTIREC_MGMT_CMPURL 0x04
|
||||||
|
#define FRU_MULTIREC_MGMT_URL_MINLEN 16
|
||||||
|
#define FRU_MULTIREC_MGMT_URL_MAXLEN 256
|
||||||
|
|
||||||
|
#define FRU_MULTIREC_MGMT_SYSNAME 0x02
|
||||||
|
#define FRU_MULTIREC_MGMT_CMPNAME 0x05
|
||||||
|
#define FRU_MULTIREC_MGMT_NAME_MINLEN 8
|
||||||
|
#define FRU_MULTIREC_MGMT_NAME_MAXLEN 64
|
||||||
|
|
||||||
|
#define FRU_MULTIREC_MGMT_SYSPINGADDR 0x03
|
||||||
|
#define FRU_MULTIREC_MGMT_CMPPINGADDR 0x06
|
||||||
|
#define FRU_MULTIREC_MGMT_PINGADDR_MINLEN 8
|
||||||
|
#define FRU_MULTIREC_MGMT_PINGADDR_MAXLEN 64
|
||||||
|
|
||||||
|
#define FRU_MULTIREC_MGMT_UUID 0x07
|
||||||
|
#define FRU_MULTIREC_MGMT_UUID_LEN 16
|
||||||
|
|
||||||
|
#define FRU_MULTIREC_MGMT_DATA_MAXLEN FRU_MULTIREC_MGMT_URL_MAXLEN
|
||||||
|
uint8_t data[];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_multirec_oem_header {
|
||||||
|
unsigned char mfg_id[3];
|
||||||
|
#define FRU_PICMG_BACKPLANE_P2P 0x04
|
||||||
|
#define FRU_PICMG_ADDRESS_TABLE 0x10
|
||||||
|
#define FRU_PICMG_SHELF_POWER_DIST 0x11
|
||||||
|
#define FRU_PICMG_SHELF_ACTIVATION 0x12
|
||||||
|
#define FRU_PICMG_SHMC_IP_CONN 0x13
|
||||||
|
#define FRU_PICMG_BOARD_P2P 0x14
|
||||||
|
#define FRU_AMC_CURRENT 0x16
|
||||||
|
#define FRU_AMC_ACTIVATION 0x17
|
||||||
|
#define FRU_AMC_CARRIER_P2P 0x18
|
||||||
|
#define FRU_AMC_P2P 0x19
|
||||||
|
#define FRU_AMC_CARRIER_INFO 0x1a
|
||||||
|
#define FRU_UTCA_FRU_INFO_TABLE 0x20
|
||||||
|
#define FRU_UTCA_CARRIER_MNG_IP 0x21
|
||||||
|
#define FRU_UTCA_CARRIER_INFO 0x22
|
||||||
|
#define FRU_UTCA_CARRIER_LOCATION 0x23
|
||||||
|
#define FRU_UTCA_SHMC_IP_LINK 0x24
|
||||||
|
#define FRU_UTCA_POWER_POLICY 0x25
|
||||||
|
#define FRU_UTCA_ACTIVATION 0x26
|
||||||
|
#define FRU_UTCA_PM_CAPABILTY 0x27
|
||||||
|
#define FRU_UTCA_FAN_GEOGRAPHY 0x28
|
||||||
|
#define FRU_UTCA_CLOCK_MAPPING 0x29
|
||||||
|
#define FRU_UTCA_MSG_BRIDGE_POLICY 0x2A
|
||||||
|
#define FRU_UTCA_OEM_MODULE_DESC 0x2B
|
||||||
|
#define FRU_PICMG_CLK_CARRIER_P2P 0x2C
|
||||||
|
#define FRU_PICMG_CLK_CONFIG 0x2D
|
||||||
|
unsigned char record_id;
|
||||||
|
unsigned char record_version;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_guid {
|
||||||
|
unsigned char guid[16];
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_link_desc {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned int desig_channel:6;
|
||||||
|
unsigned int desig_if:2;
|
||||||
|
unsigned int desig_port:4;
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_BASE 0x01
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET 0x02
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND 0x03
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR 0x04
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_PCIE 0x05
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET_10GBD 0x32
|
||||||
|
unsigned int type:8;
|
||||||
|
unsigned int ext:4;
|
||||||
|
unsigned int grouping:8;
|
||||||
|
#else
|
||||||
|
unsigned int grouping:8;
|
||||||
|
unsigned int ext:4;
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_BASE 0x01
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET 0x02
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND 0x03
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR 0x04
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_PCIE 0x05
|
||||||
|
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET_10GBD 0x32
|
||||||
|
unsigned int type:8;
|
||||||
|
unsigned int desig_port:4;
|
||||||
|
unsigned int desig_if:2;
|
||||||
|
unsigned int desig_channel:6;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_RESERVED 0x00
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_RESERVED1 0x01
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_PCI_EXPRESS 0x02
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_ADVANCED_SWITCHING1 0x03
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_ADVANCED_SWITCHING2 0x04
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_ETHERNET 0x05
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_RAPIDIO 0x06
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_STORAGE 0x07
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
/* This is used in command, not in FRU */
|
||||||
|
struct fru_picmgext_amc_link_info {
|
||||||
|
unsigned char linkInfo[3];
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_amc_link_desc_core {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned int designator:12;
|
||||||
|
unsigned int type:8;
|
||||||
|
unsigned int ext:4;
|
||||||
|
unsigned int grouping:8;
|
||||||
|
#else
|
||||||
|
unsigned int grouping:8;
|
||||||
|
unsigned int ext:4;
|
||||||
|
unsigned int type:8;
|
||||||
|
unsigned int designator:12;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_amc_link_desc_extra {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned char asymetricMatch:2;
|
||||||
|
unsigned char reserved:6;
|
||||||
|
#else
|
||||||
|
unsigned char reserved:6;
|
||||||
|
unsigned char asymetricMatch:2;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_amc_link_desc {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
struct fru_picmgext_amc_link_desc_core core;/* lsb */
|
||||||
|
struct fru_picmgext_amc_link_desc_extra extra;
|
||||||
|
#else
|
||||||
|
struct fru_picmgext_amc_link_desc_extra extra;
|
||||||
|
struct fru_picmgext_amc_link_desc_core core;/* lsb */
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define FRU_PICMGEXT_OEM_SWFW 0x03
|
||||||
|
#define OEM_SWFW_NBLOCK_OFFSET 0x05
|
||||||
|
#define OEM_SWFW_FIELD_START_OFFSET 0x06
|
||||||
|
|
||||||
|
#define FRU_PICMGEXT_CHN_DESC_RECORD_SIZE 3
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_chn_desc {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned int remote_slot:8;
|
||||||
|
unsigned int remote_chn:5;
|
||||||
|
unsigned int local_chn:5;
|
||||||
|
unsigned int res:14;
|
||||||
|
#else
|
||||||
|
unsigned int res:14;
|
||||||
|
unsigned int local_chn:5;
|
||||||
|
unsigned int remote_chn:5;
|
||||||
|
unsigned int remote_slot:8;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_slot_desc {
|
||||||
|
unsigned char chan_type;
|
||||||
|
unsigned char slot_addr;
|
||||||
|
unsigned char chn_count;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FRU_PICMGEXT_DESIGN_IF_BASE 0x00
|
||||||
|
#define FRU_PICMGEXT_DESIGN_IF_FABRIC 0x01
|
||||||
|
#define FRU_PICMGEXT_DESIGN_IF_UPDATE_CHANNEL 0x02
|
||||||
|
#define FRU_PICMGEXT_DESIGN_IF_RESERVED 0x03
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_carrier_activation_record {
|
||||||
|
unsigned short max_internal_curr;
|
||||||
|
unsigned char allowance_for_readiness;
|
||||||
|
unsigned char module_activation_record_count;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_activation_record {
|
||||||
|
unsigned char ibmb_addr;
|
||||||
|
unsigned char max_module_curr;
|
||||||
|
unsigned char reserved;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_carrier_p2p_record {
|
||||||
|
unsigned char resource_id;
|
||||||
|
unsigned char p2p_count;
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_carrier_p2p_descriptor {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned char remote_resource_id;
|
||||||
|
unsigned short remote_port:5;
|
||||||
|
unsigned short local_port:5;
|
||||||
|
unsigned short reserved:6;
|
||||||
|
#else
|
||||||
|
unsigned short reserved:6;
|
||||||
|
unsigned short local_port:5;
|
||||||
|
unsigned short remote_port:5;
|
||||||
|
unsigned char remote_resource_id;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_amc_p2p_record {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned char resource_id :4;
|
||||||
|
unsigned char /* reserved */ :3;
|
||||||
|
unsigned char record_type :1;
|
||||||
|
#else
|
||||||
|
unsigned char record_type :1;
|
||||||
|
unsigned char /* reserved */ :3;
|
||||||
|
unsigned char resource_id :4;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FRU_PICMGEXT_AMC_CHANNEL_DESC_RECORD_SIZE 3
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_amc_channel_desc_record {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned int lane0port :5;
|
||||||
|
unsigned int lane1port :5;
|
||||||
|
unsigned int lane2port :5;
|
||||||
|
unsigned int lane3port :5;
|
||||||
|
unsigned int /* reserved */ :12;
|
||||||
|
#else
|
||||||
|
unsigned int /* reserved */ :12;
|
||||||
|
unsigned int lane3port :5;
|
||||||
|
unsigned int lane2port :5;
|
||||||
|
unsigned int lane1port :5;
|
||||||
|
unsigned int lane0port :5;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_DESC_RECORD_SIZE 5
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct fru_picmgext_amc_link_desc_record {
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE 0x02
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE_AS1 0x03
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE_AS2 0x04
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_ETHERNET 0x05
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_RAPIDIO 0x06
|
||||||
|
#define FRU_PICMGEXT_AMC_LINK_TYPE_STORAGE 0x07
|
||||||
|
|
||||||
|
#define AMC_LINK_TYPE_EXT_PCIE_G1_NSSC 0x00
|
||||||
|
#define AMC_LINK_TYPE_EXT_PCIE_G1_SSC 0x01
|
||||||
|
#define AMC_LINK_TYPE_EXT_PCIE_G2_NSSC 0x02
|
||||||
|
#define AMC_LINK_TYPE_EXT_PCIE_G2_SSC 0x03
|
||||||
|
|
||||||
|
#define AMC_LINK_TYPE_EXT_ETH_1000_BX 0x00
|
||||||
|
#define AMC_LINK_TYPE_EXT_ETH_10G_XAUI 0x01
|
||||||
|
|
||||||
|
#define AMC_LINK_TYPE_EXT_STORAGE_FC 0x00
|
||||||
|
#define AMC_LINK_TYPE_EXT_STORAGE_SATA 0x01
|
||||||
|
#define AMC_LINK_TYPE_EXT_STORAGE_SAS 0x02
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned int channel_id :8;
|
||||||
|
unsigned int port_flag_0 :1;
|
||||||
|
unsigned int port_flag_1 :1;
|
||||||
|
unsigned int port_flag_2 :1;
|
||||||
|
unsigned int port_flag_3 :1;
|
||||||
|
unsigned int type :8;
|
||||||
|
unsigned int type_ext :4;
|
||||||
|
unsigned int group_id :8;
|
||||||
|
unsigned int asym_match :2;
|
||||||
|
unsigned int /* reserved */ :30;
|
||||||
|
#else
|
||||||
|
unsigned int group_id :8;
|
||||||
|
unsigned int type_ext :4;
|
||||||
|
unsigned int type :8;
|
||||||
|
unsigned int port_flag_3 :1;
|
||||||
|
unsigned int port_flag_2 :1;
|
||||||
|
unsigned int port_flag_1 :1;
|
||||||
|
unsigned int port_flag_0 :1;
|
||||||
|
unsigned int channel_id :8;
|
||||||
|
|
||||||
|
unsigned int /* reserved */ :30;
|
||||||
|
unsigned int asym_match :2;
|
||||||
|
#endif
|
||||||
|
}ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* IPMI Return codes for Get FRU Inventory Area and Write FRU Inventory Area */
|
||||||
|
/* PROTECTED_OFFSET Only expected on write command failures. */
|
||||||
|
#define IPMI_CC_FRU_WRITE_PROTECTED_OFFSET 0x80
|
||||||
|
#define IPMI_CC_FRU_DEVICE_BUSY 0x81
|
||||||
|
|
||||||
|
/* FRU Board manufacturing date */
|
||||||
|
#define FRU_BOARD_DATE_UNSPEC 0 /* IPMI FRU Information Storage Definition
|
||||||
|
v1.0 rev 1.3, Table 11-1 */
|
||||||
|
static inline time_t ipmi_fru2time_t(void *mfg_date) {
|
||||||
|
const uint64_t secs_from_1970_1996 = 820454400;
|
||||||
|
uint32_t fru_ts = ipmi24toh(mfg_date);
|
||||||
|
time_t ts;
|
||||||
|
|
||||||
|
if (FRU_BOARD_DATE_UNSPEC == fru_ts) {
|
||||||
|
ts = IPMI_TIME_UNSPECIFIED;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ts = fru_ts * 60 + secs_from_1970_1996;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct ipmi_fru_bloc {
|
||||||
|
struct ipmi_fru_bloc * next;
|
||||||
|
uint16_t start;
|
||||||
|
uint16_t size;
|
||||||
|
uint8_t blocId[32];
|
||||||
|
} t_ipmi_fru_bloc;
|
||||||
|
|
||||||
|
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
|
||||||
|
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
|
||||||
|
char *get_fru_area_str(uint8_t *data, uint32_t *offset);
|
240
include/ipmitool/ipmi_fwum.h
Normal file
240
include/ipmitool/ipmi_fwum.h
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
/* KFWUM Version */
|
||||||
|
# define VER_MAJOR 1
|
||||||
|
# define VER_MINOR 3
|
||||||
|
/* Minimum size (IPMB/IOL/old protocol) */
|
||||||
|
# define KFWUM_SMALL_BUFFER 32
|
||||||
|
/* Maximum size on KCS interface */
|
||||||
|
# define KFWUM_BIG_BUFFER 32
|
||||||
|
# define MAX_BUFFER_SIZE 1024*16
|
||||||
|
|
||||||
|
/* 3 address + 1 size + 1 checksum + 1 command */
|
||||||
|
# define KFWUM_OLD_CMD_OVERHEAD 6
|
||||||
|
/* 1 sequence + 1 size + 1 checksum + 1 command */
|
||||||
|
# define KFWUM_NEW_CMD_OVERHEAD 4
|
||||||
|
# define KFWUM_PAGE_SIZE 256
|
||||||
|
|
||||||
|
# define FWUM_SAVE_FIRMWARE_NO_RESPONSE_LIMIT 6
|
||||||
|
# define FWUM_MAX_UPLOAD_RETRY 6
|
||||||
|
|
||||||
|
# define TRACE_LOG_CHUNK_COUNT 7
|
||||||
|
# define TRACE_LOG_CHUNK_SIZE 7
|
||||||
|
# define TRACE_LOG_ATT_COUNT 3
|
||||||
|
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_LOCATION 0x5a0
|
||||||
|
# define IN_FIRMWARE_INFO_SIZE 20
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_FILE_SIZE 0
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_CHECKSUM 4
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_BOARD_ID 6
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_DEVICE_ID 8
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_TABLE_VERSION 9
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_IMPLEMENT_REV 10
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_VER_MAJOROR 11
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_VER_MINORSUB 12
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_SDR_REV 13
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_IANA0 14
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_IANA1 15
|
||||||
|
# define IN_FIRMWARE_INFO_OFFSET_IANA2 16
|
||||||
|
|
||||||
|
# define KWUM_GET_BYTE_AT_OFFSET(pBuffer,os) pBuffer[os]
|
||||||
|
|
||||||
|
int ipmi_fwum_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
|
typedef enum eKFWUM_BoardList
|
||||||
|
{
|
||||||
|
KFWUM_BOARD_KONTRON_UNKNOWN = 0,
|
||||||
|
KFWUM_BOARD_KONTRON_5002 = 5002,
|
||||||
|
} tKFWUM_BoardList;
|
||||||
|
|
||||||
|
typedef struct sKFWUM_BoardInfo
|
||||||
|
{
|
||||||
|
tKFWUM_BoardList boardId;
|
||||||
|
IPMI_OEM iana;
|
||||||
|
} tKFWUM_BoardInfo;
|
||||||
|
|
||||||
|
typedef enum eKFWUM_DownloadType
|
||||||
|
{
|
||||||
|
KFWUM_DOWNLOAD_TYPE_ADDRESS = 0,
|
||||||
|
KFWUM_DOWNLOAD_TYPE_SEQUENCE,
|
||||||
|
} tKFWUM_DownloadType;
|
||||||
|
|
||||||
|
typedef enum eKFWUM_DownloadBuffferType
|
||||||
|
{
|
||||||
|
KFWUM_SMALL_BUFFER_TYPE = 0,
|
||||||
|
KFUMW_BIG_BUFFER_TYPE
|
||||||
|
} tKFWUM_DownloadBuffferType;
|
||||||
|
|
||||||
|
typedef struct sKFWUM_InFirmwareInfo
|
||||||
|
{
|
||||||
|
unsigned long fileSize;
|
||||||
|
unsigned short checksum;
|
||||||
|
unsigned short sumToRemoveFromChecksum;
|
||||||
|
/* Since the checksum is added in the bin
|
||||||
|
* after the checksum is calculated, we
|
||||||
|
* need to remove the each byte value. This
|
||||||
|
* byte will contain the addition of both bytes
|
||||||
|
*/
|
||||||
|
tKFWUM_BoardList boardId;
|
||||||
|
unsigned char deviceId;
|
||||||
|
unsigned char tableVers;
|
||||||
|
unsigned char implRev;
|
||||||
|
unsigned char versMajor;
|
||||||
|
unsigned char versMinor;
|
||||||
|
unsigned char versSubMinor;
|
||||||
|
unsigned char sdrRev;
|
||||||
|
IPMI_OEM iana;
|
||||||
|
} tKFWUM_InFirmwareInfo;
|
||||||
|
|
||||||
|
typedef struct sKFWUM_SaveFirmwareInfo
|
||||||
|
{
|
||||||
|
tKFWUM_DownloadType downloadType;
|
||||||
|
unsigned char bufferSize;
|
||||||
|
unsigned char overheadSize;
|
||||||
|
} tKFWUM_SaveFirmwareInfo;
|
||||||
|
|
||||||
|
/* COMMANDS */
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumGetInfoResp {
|
||||||
|
unsigned char protocolRevision;
|
||||||
|
unsigned char controllerDeviceId;
|
||||||
|
struct {
|
||||||
|
unsigned char mode:1;
|
||||||
|
unsigned char seqAdd:1;
|
||||||
|
unsigned char res : 6;
|
||||||
|
} byte;
|
||||||
|
unsigned char firmRev1;
|
||||||
|
unsigned char firmRev2;
|
||||||
|
unsigned char numBank;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumGetStatusResp {
|
||||||
|
unsigned char bankState;
|
||||||
|
unsigned char firmLengthLSB;
|
||||||
|
unsigned char firmLengthMid;
|
||||||
|
unsigned char firmLengthMSB;
|
||||||
|
unsigned char firmRev1;
|
||||||
|
unsigned char firmRev2;
|
||||||
|
unsigned char firmRev3;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumManualRollbackReq {
|
||||||
|
unsigned char type;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumStartFirmwareDownloadReq {
|
||||||
|
unsigned char lengthLSB;
|
||||||
|
unsigned char lengthMid;
|
||||||
|
unsigned char lengthMSB;
|
||||||
|
unsigned char paddingLSB;
|
||||||
|
unsigned char paddingMSB;
|
||||||
|
unsigned char useSequence;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumStartFirmwareDownloadResp {
|
||||||
|
unsigned char bank;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumSaveFirmwareAddressReq
|
||||||
|
{
|
||||||
|
unsigned char addressLSB;
|
||||||
|
unsigned char addressMid;
|
||||||
|
unsigned char addressMSB;
|
||||||
|
unsigned char numBytes;
|
||||||
|
unsigned char txBuf[KFWUM_SMALL_BUFFER-KFWUM_OLD_CMD_OVERHEAD];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumSaveFirmwareSequenceReq
|
||||||
|
{
|
||||||
|
unsigned char sequenceNumber;
|
||||||
|
unsigned char txBuf[KFWUM_BIG_BUFFER];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
# endif
|
||||||
|
struct KfwumFinishFirmwareDownloadReq {
|
||||||
|
unsigned char versionMaj;
|
||||||
|
unsigned char versionMinSub;
|
||||||
|
unsigned char versionSdr;
|
||||||
|
unsigned char reserved;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
# ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
# endif
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
* Copyright (c) 2003 Kontron Canada, Inc. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@ -30,12 +30,16 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_HPMFWUPG_H
|
#pragma once
|
||||||
#define IPMI_HPMFWUPG_H
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <ipmitool/bswap.h>
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_entity.h>
|
||||||
|
|
||||||
int ipmi_hpmfwupg_main(struct ipmi_intf *, int, char **);
|
int ipmi_gendev_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
#endif /* IPMI_KFWUM_H */
|
|
787
include/ipmitool/ipmi_hpmfwupg.h
Normal file
787
include/ipmitool/ipmi_hpmfwupg.h
Normal file
@ -0,0 +1,787 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
int ipmi_hpmfwupg_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
|
/* Agent version */
|
||||||
|
#define HPMFWUPG_VERSION_MAJOR 1
|
||||||
|
#define HPMFWUPG_VERSION_MINOR 0
|
||||||
|
#define HPMFWUPG_VERSION_SUBMINOR 9
|
||||||
|
|
||||||
|
/* HPM.1 FIRMWARE UPGRADE COMMANDS (part of PICMG) */
|
||||||
|
#define HPMFWUPG_GET_TARGET_UPG_CAPABILITIES 0x2E
|
||||||
|
#define HPMFWUPG_GET_COMPONENT_PROPERTIES 0x2F
|
||||||
|
#define HPMFWUPG_ABORT_UPGRADE 0x30
|
||||||
|
#define HPMFWUPG_INITIATE_UPGRADE_ACTION 0x31
|
||||||
|
#define HPMFWUPG_UPLOAD_FIRMWARE_BLOCK 0x32
|
||||||
|
#define HPMFWUPG_FINISH_FIRMWARE_UPLOAD 0x33
|
||||||
|
#define HPMFWUPG_GET_UPGRADE_STATUS 0x34
|
||||||
|
#define HPMFWUPG_ACTIVATE_FIRMWARE 0x35
|
||||||
|
#define HPMFWUPG_QUERY_SELFTEST_RESULT 0x36
|
||||||
|
#define HPMFWUPG_QUERY_ROLLBACK_STATUS 0x37
|
||||||
|
#define HPMFWUPG_MANUAL_FIRMWARE_ROLLBACK 0x38
|
||||||
|
|
||||||
|
/* HPM.1 SPECIFIC COMPLETION CODES */
|
||||||
|
#define HPMFWUPG_ROLLBACK_COMPLETED 0x00
|
||||||
|
#define HPMFWUPG_COMMAND_IN_PROGRESS 0x80
|
||||||
|
#define HPMFWUPG_NOT_SUPPORTED 0x81
|
||||||
|
#define HPMFWUPG_SIZE_MISMATCH 0x81
|
||||||
|
#define HPMFWUPG_ROLLBACK_FAILURE 0x81
|
||||||
|
#define HPMFWUPG_INV_COMP_MASK 0x81
|
||||||
|
#define HPMFWUPG__ABORT_FAILURE 0x81
|
||||||
|
#define HPMFWUPG_INV_COMP_ID 0x82
|
||||||
|
#define HPMFWUPG_INT_CHECKSUM_ERROR 0x82
|
||||||
|
#define HPMFWUPG_INV_UPLOAD_MODE 0x82
|
||||||
|
#define HPMFWUPG_ROLLBACK_OVERRIDE 0x82
|
||||||
|
#define HPMFWUPG_INV_COMP_PROP 0x83
|
||||||
|
#define HPMFWUPG_FW_MISMATCH 0x83
|
||||||
|
#define HPMFWUPG_ROLLBACK_DENIED 0x83
|
||||||
|
|
||||||
|
/* HPM FIRMWARE UPGRADE GENERAL DEFINITIONS */
|
||||||
|
#define HPMFWUPG_PICMG_IDENTIFIER 0
|
||||||
|
#define HPMFWUPG_VERSION_SIZE 6
|
||||||
|
#define HPMFWUPG_DESC_STRING_LENGTH 12
|
||||||
|
#define HPMFWUPG_DEFAULT_INACCESS_TIMEOUT 60 /* sec */
|
||||||
|
#define HPMFWUPG_DEFAULT_UPGRADE_TIMEOUT 60 /* sec */
|
||||||
|
#define HPMFWUPG_MD5_SIGNATURE_LENGTH 16
|
||||||
|
|
||||||
|
/* Component IDs */
|
||||||
|
typedef enum eHpmfwupgComponentId {
|
||||||
|
HPMFWUPG_COMPONENT_ID_0 = 0,
|
||||||
|
HPMFWUPG_COMPONENT_ID_1,
|
||||||
|
HPMFWUPG_COMPONENT_ID_2,
|
||||||
|
HPMFWUPG_COMPONENT_ID_3,
|
||||||
|
HPMFWUPG_COMPONENT_ID_4,
|
||||||
|
HPMFWUPG_COMPONENT_ID_5,
|
||||||
|
HPMFWUPG_COMPONENT_ID_6,
|
||||||
|
HPMFWUPG_COMPONENT_ID_7,
|
||||||
|
HPMFWUPG_COMPONENT_ID_MAX
|
||||||
|
} tHpmfwupgComponentId;
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgComponentBitMask {
|
||||||
|
union {
|
||||||
|
unsigned char byte;
|
||||||
|
struct {
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
unsigned char component7 : 1;
|
||||||
|
unsigned char component6 : 1;
|
||||||
|
unsigned char component5 : 1;
|
||||||
|
unsigned char component4 : 1;
|
||||||
|
unsigned char component3 : 1;
|
||||||
|
unsigned char component2 : 1;
|
||||||
|
unsigned char component1 : 1;
|
||||||
|
unsigned char component0 : 1;
|
||||||
|
#else
|
||||||
|
unsigned char component0 : 1;
|
||||||
|
unsigned char component1 : 1;
|
||||||
|
unsigned char component2 : 1;
|
||||||
|
unsigned char component3 : 1;
|
||||||
|
unsigned char component4 : 1;
|
||||||
|
unsigned char component5 : 1;
|
||||||
|
unsigned char component6 : 1;
|
||||||
|
unsigned char component7 : 1;
|
||||||
|
#endif
|
||||||
|
} ATTRIBUTE_PACKING bitField;
|
||||||
|
} ATTRIBUTE_PACKING ComponentBits;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static const int HPMFWUPG_SUCCESS = 0;
|
||||||
|
static const int HPMFWUPG_ERROR = -1;
|
||||||
|
/* Upload firmware specific error codes */
|
||||||
|
static const int HPMFWUPG_UPLOAD_BLOCK_LENGTH = 1;
|
||||||
|
static const int HPMFWUPG_UPLOAD_RETRY = 2;
|
||||||
|
|
||||||
|
|
||||||
|
/* TARGET UPGRADE CAPABILITIES DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetTargetUpgCapabilitiesReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetTargetUpgCapabilitiesResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char hpmVersion;
|
||||||
|
union {
|
||||||
|
unsigned char byte;
|
||||||
|
struct {
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
unsigned char fwUpgUndesirable : 1;
|
||||||
|
unsigned char autRollbackOverride : 1;
|
||||||
|
unsigned char ipmcDegradedDurinUpg: 1;
|
||||||
|
unsigned char deferActivation : 1;
|
||||||
|
unsigned char servAffectDuringUpg : 1;
|
||||||
|
unsigned char manualRollback : 1;
|
||||||
|
unsigned char autRollback : 1;
|
||||||
|
unsigned char ipmcSelftestCap : 1;
|
||||||
|
#else
|
||||||
|
unsigned char ipmcSelftestCap : 1;
|
||||||
|
unsigned char autRollback : 1;
|
||||||
|
unsigned char manualRollback : 1;
|
||||||
|
unsigned char servAffectDuringUpg : 1;
|
||||||
|
unsigned char deferActivation : 1;
|
||||||
|
unsigned char ipmcDegradedDurinUpg: 1;
|
||||||
|
unsigned char autRollbackOverride : 1;
|
||||||
|
unsigned char fwUpgUndesirable : 1;
|
||||||
|
#endif
|
||||||
|
} ATTRIBUTE_PACKING bitField;
|
||||||
|
} ATTRIBUTE_PACKING GlobalCapabilities;
|
||||||
|
unsigned char upgradeTimeout;
|
||||||
|
unsigned char selftestTimeout;
|
||||||
|
unsigned char rollbackTimeout;
|
||||||
|
unsigned char inaccessTimeout;
|
||||||
|
struct HpmfwupgComponentBitMask componentsPresent;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetTargetUpgCapabilitiesCtx {
|
||||||
|
struct HpmfwupgGetTargetUpgCapabilitiesReq req;
|
||||||
|
struct HpmfwupgGetTargetUpgCapabilitiesResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* COMPONENT PROPERTIES DEFINITIONS */
|
||||||
|
typedef enum eHpmfwupgCompPropertiesSelect {
|
||||||
|
HPMFWUPG_COMP_GEN_PROPERTIES = 0,
|
||||||
|
HPMFWUPG_COMP_CURRENT_VERSION,
|
||||||
|
HPMFWUPG_COMP_DESCRIPTION_STRING,
|
||||||
|
HPMFWUPG_COMP_ROLLBACK_FIRMWARE_VERSION,
|
||||||
|
HPMFWUPG_COMP_DEFERRED_FIRMWARE_VERSION,
|
||||||
|
HPMFWUPG_COMP_RESERVED,
|
||||||
|
HPMFWUPG_COMP_OEM_PROPERTIES = 192
|
||||||
|
} tHpmfwupgCompPropertiesSelect;
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetComponentPropertiesReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char componentId;
|
||||||
|
unsigned char selector;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetGeneralPropResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
union {
|
||||||
|
unsigned char byte;
|
||||||
|
struct {
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
unsigned char reserved : 2;
|
||||||
|
unsigned char payloadColdReset : 1;
|
||||||
|
unsigned char deferredActivation : 1;
|
||||||
|
unsigned char comparisonSupport : 1;
|
||||||
|
unsigned char preparationSupport : 1;
|
||||||
|
unsigned char rollbackBackup : 2;
|
||||||
|
#else
|
||||||
|
unsigned char rollbackBackup : 2;
|
||||||
|
unsigned char preparationSupport : 1;
|
||||||
|
unsigned char comparisonSupport : 1;
|
||||||
|
unsigned char deferredActivation : 1;
|
||||||
|
unsigned char payloadColdReset : 1;
|
||||||
|
unsigned char reserved : 2;
|
||||||
|
#endif
|
||||||
|
} ATTRIBUTE_PACKING bitfield;
|
||||||
|
} ATTRIBUTE_PACKING GeneralCompProperties;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetCurrentVersionResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char currentVersion[HPMFWUPG_VERSION_SIZE];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetDescStringResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
char descString[HPMFWUPG_DESC_STRING_LENGTH];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetRollbackFwVersionResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char rollbackFwVersion[HPMFWUPG_VERSION_SIZE];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetDeferredFwVersionResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char deferredFwVersion[HPMFWUPG_VERSION_SIZE];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* GetComponentProperties - OEM properties (192) */
|
||||||
|
#define HPMFWUPG_OEM_LENGTH 4
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetOemProperties {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char oemRspData[HPMFWUPG_OEM_LENGTH];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetComponentPropertiesResp {
|
||||||
|
union {
|
||||||
|
struct HpmfwupgGetGeneralPropResp generalPropResp;
|
||||||
|
struct HpmfwupgGetCurrentVersionResp currentVersionResp;
|
||||||
|
struct HpmfwupgGetDescStringResp descStringResp;
|
||||||
|
struct HpmfwupgGetRollbackFwVersionResp rollbackFwVersionResp;
|
||||||
|
struct HpmfwupgGetDeferredFwVersionResp deferredFwVersionResp;
|
||||||
|
struct HpmfwupgGetOemProperties oemProperties;
|
||||||
|
} ATTRIBUTE_PACKING Response;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetComponentPropertiesCtx {
|
||||||
|
struct HpmfwupgGetComponentPropertiesReq req;
|
||||||
|
struct HpmfwupgGetComponentPropertiesResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ABORT UPGRADE DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgAbortUpgradeReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgAbortUpgradeResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgAbortUpgradeCtx {
|
||||||
|
struct HpmfwupgAbortUpgradeReq req;
|
||||||
|
struct HpmfwupgAbortUpgradeResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* UPGRADE ACTIONS DEFINITIONS */
|
||||||
|
typedef enum eHpmfwupgUpgradeAction {
|
||||||
|
HPMFWUPG_UPGRADE_ACTION_BACKUP = 0,
|
||||||
|
HPMFWUPG_UPGRADE_ACTION_PREPARE,
|
||||||
|
HPMFWUPG_UPGRADE_ACTION_UPGRADE,
|
||||||
|
HPMFWUPG_UPGRADE_ACTION_COMPARE,
|
||||||
|
HPMFWUPG_UPGRADE_ACTION_INVALID = 0xff
|
||||||
|
} tHpmfwupgUpgradeAction;
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgInitiateUpgradeActionReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
struct HpmfwupgComponentBitMask componentsMask;
|
||||||
|
unsigned char upgradeAction;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgInitiateUpgradeActionResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgInitiateUpgradeActionCtx {
|
||||||
|
struct HpmfwupgInitiateUpgradeActionReq req;
|
||||||
|
struct HpmfwupgInitiateUpgradeActionResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* UPLOAD FIRMWARE BLOCK DEFINITIONS */
|
||||||
|
#define HPMFWUPG_SEND_DATA_COUNT_KCS 30
|
||||||
|
#define HPMFWUPG_SEND_DATA_COUNT_LAN 25
|
||||||
|
#define HPMFWUPG_SEND_DATA_COUNT_IPMB 26
|
||||||
|
#define HPMFWUPG_SEND_DATA_COUNT_IPMBL 26
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgUploadFirmwareBlockReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char blockNumber;
|
||||||
|
unsigned char data[];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgUploadFirmwareBlockResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgUploadFirmwareBlockCtx {
|
||||||
|
struct HpmfwupgUploadFirmwareBlockReq * req;
|
||||||
|
struct HpmfwupgUploadFirmwareBlockResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FINISH FIRMWARE UPLOAD DEFINITIONS */
|
||||||
|
#define HPMFWUPG_IMAGE_SIZE_BYTE_COUNT 4
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgFinishFirmwareUploadReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char componentId;
|
||||||
|
unsigned char imageLength[HPMFWUPG_IMAGE_SIZE_BYTE_COUNT];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgFinishFirmwareUploadResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgFinishFirmwareUploadCtx {
|
||||||
|
struct HpmfwupgFinishFirmwareUploadReq req;
|
||||||
|
struct HpmfwupgFinishFirmwareUploadResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ACTIVATE FW DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgActivateFirmwareReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char rollback_override;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgActivateFirmwareResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgActivateFirmwareCtx {
|
||||||
|
struct HpmfwupgActivateFirmwareReq req;
|
||||||
|
struct HpmfwupgActivateFirmwareResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* GET UPGRADE STATUS DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetUpgradeStatusReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetUpgradeStatusResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char cmdInProcess;
|
||||||
|
unsigned char lastCmdCompCode;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgGetUpgradeStatusCtx {
|
||||||
|
struct HpmfwupgGetUpgradeStatusReq req;
|
||||||
|
struct HpmfwupgGetUpgradeStatusResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* MANUAL FW ROLLBACK DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgManualFirmwareRollbackReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgManualFirmwareRollbackResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgManualFirmwareRollbackCtx {
|
||||||
|
struct HpmfwupgManualFirmwareRollbackReq req;
|
||||||
|
struct HpmfwupgManualFirmwareRollbackResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* QUERY ROLLBACK STATUS DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgQueryRollbackStatusReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgQueryRollbackStatusResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
struct HpmfwupgComponentBitMask rollbackComp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgQueryRollbackStatusCtx {
|
||||||
|
struct HpmfwupgQueryRollbackStatusReq req;
|
||||||
|
struct HpmfwupgQueryRollbackStatusResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* QUERY SELF TEST RESULT DEFINITIONS */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgQuerySelftestResultReq {
|
||||||
|
unsigned char picmgId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgQuerySelftestResultResp {
|
||||||
|
unsigned char picmgId;
|
||||||
|
unsigned char result1;
|
||||||
|
unsigned char result2;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgQuerySelftestResultCtx {
|
||||||
|
struct HpmfwupgQuerySelftestResultReq req;
|
||||||
|
struct HpmfwupgQuerySelftestResultResp resp;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* HPM.1 IMAGE DEFINITIONS */
|
||||||
|
#define HPMFWUPG_HEADER_SIGNATURE_LENGTH 8
|
||||||
|
#define HPMFWUPG_MANUFATURER_ID_LENGTH 3
|
||||||
|
#define HPMFWUPG_PRODUCT_ID_LENGTH 2
|
||||||
|
#define HPMFWUPG_TIME_LENGTH 4
|
||||||
|
#define HPMFWUPG_TIMEOUT_LENGTH 1
|
||||||
|
#define HPMFWUPG_COMP_REVISION_LENGTH 2
|
||||||
|
#define HPMFWUPG_FIRM_REVISION_LENGTH 6
|
||||||
|
#define HPMFWUPG_IMAGE_HEADER_VERSION 0
|
||||||
|
#define HPMFWUPG_IMAGE_SIGNATURE "PICMGFWU"
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgImageHeader {
|
||||||
|
char signature[HPMFWUPG_HEADER_SIGNATURE_LENGTH];
|
||||||
|
unsigned char formatVersion;
|
||||||
|
unsigned char deviceId;
|
||||||
|
unsigned char manId[HPMFWUPG_MANUFATURER_ID_LENGTH];
|
||||||
|
unsigned char prodId[HPMFWUPG_PRODUCT_ID_LENGTH];
|
||||||
|
unsigned char time[HPMFWUPG_TIME_LENGTH];
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
unsigned char imageSelfTest : 1;
|
||||||
|
unsigned char autRollback : 1;
|
||||||
|
unsigned char manRollback : 1;
|
||||||
|
unsigned char servAffected : 1;
|
||||||
|
unsigned char reserved : 4;
|
||||||
|
#else
|
||||||
|
unsigned char reserved : 4;
|
||||||
|
unsigned char servAffected : 1;
|
||||||
|
unsigned char manRollback : 1;
|
||||||
|
unsigned char autRollback : 1;
|
||||||
|
unsigned char imageSelfTest : 1;
|
||||||
|
#endif
|
||||||
|
} ATTRIBUTE_PACKING bitField;
|
||||||
|
unsigned char byte;
|
||||||
|
}ATTRIBUTE_PACKING imageCapabilities;
|
||||||
|
struct HpmfwupgComponentBitMask components;
|
||||||
|
unsigned char selfTestTimeout;
|
||||||
|
unsigned char rollbackTimeout;
|
||||||
|
unsigned char inaccessTimeout;
|
||||||
|
unsigned char compRevision[HPMFWUPG_COMP_REVISION_LENGTH];
|
||||||
|
unsigned char firmRevision[HPMFWUPG_FIRM_REVISION_LENGTH];
|
||||||
|
unsigned short oemDataLength;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HPMFWUPG_DESCRIPTION_LENGTH 21
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgActionRecord {
|
||||||
|
unsigned char actionType;
|
||||||
|
struct HpmfwupgComponentBitMask components;
|
||||||
|
unsigned char checksum;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HPMFWUPG_FIRMWARE_SIZE_LENGTH 4
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgFirmwareImage {
|
||||||
|
unsigned char version[HPMFWUPG_FIRM_REVISION_LENGTH];
|
||||||
|
char desc[HPMFWUPG_DESCRIPTION_LENGTH];
|
||||||
|
unsigned char length[HPMFWUPG_FIRMWARE_SIZE_LENGTH];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct HpmfwupgUpgradeCtx {
|
||||||
|
struct HpmfwupgComponentBitMask compUpdateMask;
|
||||||
|
unsigned int imageSize;
|
||||||
|
unsigned char* pImageData;
|
||||||
|
unsigned char componentId;
|
||||||
|
struct HpmfwupgGetTargetUpgCapabilitiesResp targetCap;
|
||||||
|
struct HpmfwupgGetGeneralPropResp genCompProp[HPMFWUPG_COMPONENT_ID_MAX];
|
||||||
|
struct ipm_devid_rsp devId;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
# pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum eHpmfwupgActionType {
|
||||||
|
HPMFWUPG_ACTION_BACKUP_COMPONENTS = 0,
|
||||||
|
HPMFWUPG_ACTION_PREPARE_COMPONENTS,
|
||||||
|
HPMFWUPG_ACTION_UPLOAD_FIRMWARE,
|
||||||
|
HPMFWUPG_ACTION_RESERVED = 0xFF
|
||||||
|
} tHpmfwupgActionType;
|
||||||
|
|
||||||
|
/* FUNCTIONS PROTOTYPES */
|
||||||
|
#define HPMFWUPG_MAJORMINOR_VERSION_SIZE 2
|
||||||
|
|
||||||
|
/* Options added for user to check the version and to view both the FILE and
|
||||||
|
* TARGET Version
|
||||||
|
*/
|
||||||
|
#define VIEW_MODE 0x01
|
||||||
|
#define DEBUG_MODE 0x02
|
||||||
|
#define FORCE_MODE 0x04
|
||||||
|
#define COMPARE_MODE 0x08
|
||||||
|
|
||||||
|
typedef struct _VERSIONINFO {
|
||||||
|
unsigned char componentId;
|
||||||
|
unsigned char targetMajor;
|
||||||
|
unsigned char targetMinor;
|
||||||
|
unsigned char targetAux[4];
|
||||||
|
unsigned char rollbackMajor;
|
||||||
|
unsigned char rollbackMinor;
|
||||||
|
unsigned char rollbackAux[4];
|
||||||
|
unsigned char deferredMajor;
|
||||||
|
unsigned char deferredMinor;
|
||||||
|
unsigned char deferredAux[4];
|
||||||
|
unsigned char imageMajor;
|
||||||
|
unsigned char imageMinor;
|
||||||
|
unsigned char imageAux[4];
|
||||||
|
unsigned char coldResetRequired;
|
||||||
|
unsigned char rollbackSupported;
|
||||||
|
unsigned char deferredActivationSupported;
|
||||||
|
char descString[HPMFWUPG_DESC_STRING_LENGTH + 1];
|
||||||
|
}VERSIONINFO, *PVERSIONINFO;
|
||||||
|
|
||||||
|
#define TARGET_VER (0x01)
|
||||||
|
#define ROLLBACK_VER (0x02)
|
||||||
|
#define IMAGE_VER (0x04)
|
@ -1,21 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (c) 2007 Kontron Canada, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Base on code from
|
||||||
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* Redistribution of source code must retain the above copyright
|
* Redistribution of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* Redistribution in binary form must reproduce the above copyright
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* Neither the name of Sun Microsystems, Inc. or the names of
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
* contributors may be used to endorse or promote products derived
|
* contributors may be used to endorse or promote products derived
|
||||||
* from this software without specific prior written permission.
|
* from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* This software is provided "AS IS," without a warranty of any kind.
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
@ -30,13 +33,10 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_KFWUM_H
|
#pragma once
|
||||||
#define IPMI_KFWUM_H
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
|
||||||
int ipmi_fwum_main(struct ipmi_intf *, int, char **);
|
int ipmi_ime_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
#endif /* IPMI_KFWUM_H */
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_INTF_H
|
#pragma once
|
||||||
#define IPMI_INTF_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
#include <ipmitool/ipmi_oem.h>
|
#include <ipmitool/ipmi_oem.h>
|
||||||
@ -59,41 +58,81 @@ enum LANPLUS_SESSION_STATE {
|
|||||||
|
|
||||||
|
|
||||||
#define IPMI_AUTHCODE_BUFFER_SIZE 20
|
#define IPMI_AUTHCODE_BUFFER_SIZE 20
|
||||||
#define IPMI_SIK_BUFFER_SIZE 20
|
#define IPMI_SIK_BUFFER_SIZE IPMI_MAX_MD_SIZE
|
||||||
#define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */
|
#define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */
|
||||||
|
|
||||||
struct ipmi_session {
|
enum cipher_suite_ids {
|
||||||
uint8_t hostname[64];
|
IPMI_LANPLUS_CIPHER_SUITE_0 = 0,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_1 = 1,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_2 = 2,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_3 = 3,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_4 = 4,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_5 = 5,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_6 = 6,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_7 = 7,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_8 = 8,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_9 = 9,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_10 = 10,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_11 = 11,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_12 = 12,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_13 = 13,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_14 = 14,
|
||||||
|
#ifdef HAVE_CRYPTO_SHA256
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_15 = 15,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_16 = 16,
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_17 = 17,
|
||||||
|
#endif /* HAVE_CRYPTO_SHA256 */
|
||||||
|
IPMI_LANPLUS_CIPHER_SUITE_RESERVED = 0xff,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cipher_suite_info {
|
||||||
|
enum cipher_suite_ids cipher_suite_id;
|
||||||
|
uint8_t auth_alg;
|
||||||
|
uint8_t integrity_alg;
|
||||||
|
uint8_t crypt_alg;
|
||||||
|
uint32_t iana;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ipmi_session_params {
|
||||||
|
char * hostname;
|
||||||
uint8_t username[17];
|
uint8_t username[17];
|
||||||
uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1];
|
uint8_t authcode_set[IPMI_AUTHCODE_BUFFER_SIZE + 1];
|
||||||
uint8_t challenge[16];
|
|
||||||
uint8_t authtype;
|
|
||||||
uint8_t authtype_set;
|
uint8_t authtype_set;
|
||||||
|
uint8_t privlvl;
|
||||||
|
enum cipher_suite_ids cipher_suite_id;
|
||||||
|
char sol_escape_char;
|
||||||
|
int password;
|
||||||
|
int port;
|
||||||
|
int retry;
|
||||||
|
uint32_t timeout;
|
||||||
|
uint8_t kg[IPMI_KG_BUFFER_SIZE]; /* BMC key */
|
||||||
|
uint8_t lookupbit;
|
||||||
|
};
|
||||||
|
|
||||||
#define IPMI_AUTHSTATUS_PER_MSG_DISABLED 0x10
|
#define IPMI_AUTHSTATUS_PER_MSG_DISABLED 0x10
|
||||||
#define IPMI_AUTHSTATUS_PER_USER_DISABLED 0x08
|
#define IPMI_AUTHSTATUS_PER_USER_DISABLED 0x08
|
||||||
#define IPMI_AUTHSTATUS_NONNULL_USERS_ENABLED 0x04
|
#define IPMI_AUTHSTATUS_NONNULL_USERS_ENABLED 0x04
|
||||||
#define IPMI_AUTHSTATUS_NULL_USERS_ENABLED 0x02
|
#define IPMI_AUTHSTATUS_NULL_USERS_ENABLED 0x02
|
||||||
#define IPMI_AUTHSTATUS_ANONYMOUS_USERS_ENABLED 0x01
|
#define IPMI_AUTHSTATUS_ANONYMOUS_USERS_ENABLED 0x01
|
||||||
uint8_t authstatus;
|
|
||||||
uint8_t authextra;
|
|
||||||
uint8_t privlvl;
|
|
||||||
uint8_t cipher_suite_id;
|
|
||||||
char sol_escape_char;
|
|
||||||
int password;
|
|
||||||
int port;
|
|
||||||
int active;
|
|
||||||
int retry;
|
|
||||||
|
|
||||||
|
struct ipmi_session {
|
||||||
|
int active;
|
||||||
uint32_t session_id;
|
uint32_t session_id;
|
||||||
uint32_t in_seq;
|
uint32_t in_seq;
|
||||||
uint32_t out_seq;
|
uint32_t out_seq;
|
||||||
|
|
||||||
|
uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1];
|
||||||
|
uint8_t challenge[16];
|
||||||
|
uint8_t authtype;
|
||||||
|
uint8_t authstatus;
|
||||||
|
uint8_t authextra;
|
||||||
uint32_t timeout;
|
uint32_t timeout;
|
||||||
|
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_storage addr;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This struct holds state data specific to IMPI v2 / RMCP+ sessions
|
* This struct holds state data specific to IPMI v2 / RMCP+ sessions
|
||||||
*/
|
*/
|
||||||
struct {
|
struct {
|
||||||
enum LANPLUS_SESSION_STATE session_state;
|
enum LANPLUS_SESSION_STATE session_state;
|
||||||
@ -106,13 +145,12 @@ struct ipmi_session {
|
|||||||
uint8_t integrity_alg;
|
uint8_t integrity_alg;
|
||||||
uint8_t crypt_alg;
|
uint8_t crypt_alg;
|
||||||
uint8_t max_priv_level;
|
uint8_t max_priv_level;
|
||||||
uint8_t lookupbit;
|
|
||||||
|
|
||||||
uint32_t console_id;
|
uint32_t console_id;
|
||||||
uint32_t bmc_id;
|
uint32_t bmc_id;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Values required for RAKP mesages
|
* Values required for RAKP messages
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Random number generated byt the console */
|
/* Random number generated byt the console */
|
||||||
@ -124,10 +162,13 @@ struct ipmi_session {
|
|||||||
uint8_t requested_role; /* As sent in the RAKP 1 message */
|
uint8_t requested_role; /* As sent in the RAKP 1 message */
|
||||||
uint8_t rakp2_return_code;
|
uint8_t rakp2_return_code;
|
||||||
|
|
||||||
uint8_t sik[IPMI_SIK_BUFFER_SIZE]; /* Session integrity key */
|
uint8_t sik[IPMI_SIK_BUFFER_SIZE]; /* Session integrity key */
|
||||||
uint8_t kg[IPMI_KG_BUFFER_SIZE]; /* BMC key */
|
uint8_t sik_len; /* Session Integrity key length */
|
||||||
uint8_t k1[20]; /* Used for Integrity checking? */
|
uint8_t kg[IPMI_KG_BUFFER_SIZE]; /* BMC key */
|
||||||
uint8_t k2[20]; /* First 16 bytes used for AES */
|
uint8_t k1[IPMI_MAX_MD_SIZE]; /* Used for Integrity checking? */
|
||||||
|
uint8_t k1_len; /* K1 key length */
|
||||||
|
uint8_t k2[IPMI_MAX_MD_SIZE]; /* First 16 bytes used for AES */
|
||||||
|
uint8_t k2_len; /* K2 key length */
|
||||||
} v2_data;
|
} v2_data;
|
||||||
|
|
||||||
|
|
||||||
@ -161,18 +202,29 @@ struct ipmi_intf_support {
|
|||||||
struct ipmi_intf {
|
struct ipmi_intf {
|
||||||
char name[16];
|
char name[16];
|
||||||
char desc[128];
|
char desc[128];
|
||||||
|
char *devfile;
|
||||||
int fd;
|
int fd;
|
||||||
int opened;
|
int opened;
|
||||||
int abort;
|
int abort;
|
||||||
int noanswer;
|
int noanswer;
|
||||||
|
int picmg_avail;
|
||||||
|
int vita_avail;
|
||||||
|
IPMI_OEM manufacturer_id;
|
||||||
|
int ai_family;
|
||||||
|
|
||||||
|
struct ipmi_session_params ssn_params;
|
||||||
struct ipmi_session * session;
|
struct ipmi_session * session;
|
||||||
struct ipmi_oem_handle * oem;
|
struct ipmi_oem_handle * oem;
|
||||||
struct ipmi_cmd * cmdlist;
|
struct ipmi_cmd * cmdlist;
|
||||||
|
uint8_t target_ipmb_addr;
|
||||||
uint32_t my_addr;
|
uint32_t my_addr;
|
||||||
uint32_t target_addr;
|
uint32_t target_addr;
|
||||||
uint8_t target_lun;
|
uint8_t target_lun;
|
||||||
uint8_t target_channel;
|
uint8_t target_channel;
|
||||||
|
uint32_t transit_addr;
|
||||||
|
uint8_t transit_channel;
|
||||||
|
uint16_t max_request_data_size;
|
||||||
|
uint16_t max_response_data_size;
|
||||||
|
|
||||||
uint8_t devnum;
|
uint8_t devnum;
|
||||||
|
|
||||||
@ -180,12 +232,18 @@ struct ipmi_intf {
|
|||||||
int (*open)(struct ipmi_intf * intf);
|
int (*open)(struct ipmi_intf * intf);
|
||||||
void (*close)(struct ipmi_intf * intf);
|
void (*close)(struct ipmi_intf * intf);
|
||||||
struct ipmi_rs *(*sendrecv)(struct ipmi_intf * intf, struct ipmi_rq * req);
|
struct ipmi_rs *(*sendrecv)(struct ipmi_intf * intf, struct ipmi_rq * req);
|
||||||
int (*sendrsp)(struct ipmi_intf * intf, struct ipmi_rs * rsp);
|
|
||||||
struct ipmi_rs *(*recv_sol)(struct ipmi_intf * intf);
|
struct ipmi_rs *(*recv_sol)(struct ipmi_intf * intf);
|
||||||
struct ipmi_rs *(*send_sol)(struct ipmi_intf * intf, struct ipmi_v2_payload * payload);
|
struct ipmi_rs *(*send_sol)(struct ipmi_intf * intf, struct ipmi_v2_payload * payload);
|
||||||
int (*keepalive)(struct ipmi_intf * intf);
|
int (*keepalive)(struct ipmi_intf * intf);
|
||||||
|
int (*set_my_addr)(struct ipmi_intf * intf, uint8_t addr);
|
||||||
|
void (*set_max_request_data_size)(struct ipmi_intf * intf, uint16_t size);
|
||||||
|
void (*set_max_response_data_size)(struct ipmi_intf * intf, uint16_t size);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint16_t ipmi_intf_get_max_request_data_size(struct ipmi_intf *intf);
|
||||||
|
uint16_t ipmi_intf_get_max_response_data_size(struct ipmi_intf *intf);
|
||||||
|
uint8_t ipmi_intf_get_bridging_level(const struct ipmi_intf *intf);
|
||||||
|
|
||||||
struct ipmi_intf * ipmi_intf_load(char * name);
|
struct ipmi_intf * ipmi_intf_load(char * name);
|
||||||
void ipmi_intf_print(struct ipmi_intf_support * intflist);
|
void ipmi_intf_print(struct ipmi_intf_support * intflist);
|
||||||
|
|
||||||
@ -194,13 +252,19 @@ void ipmi_intf_session_set_username(struct ipmi_intf * intf, char * username);
|
|||||||
void ipmi_intf_session_set_password(struct ipmi_intf * intf, char * password);
|
void ipmi_intf_session_set_password(struct ipmi_intf * intf, char * password);
|
||||||
void ipmi_intf_session_set_privlvl(struct ipmi_intf * intf, uint8_t privlvl);
|
void ipmi_intf_session_set_privlvl(struct ipmi_intf * intf, uint8_t privlvl);
|
||||||
void ipmi_intf_session_set_lookupbit(struct ipmi_intf * intf, uint8_t lookupbit);
|
void ipmi_intf_session_set_lookupbit(struct ipmi_intf * intf, uint8_t lookupbit);
|
||||||
void ipmi_intf_session_set_cipher_suite_id(struct ipmi_intf * intf, uint8_t cipher_suite_id);
|
#ifdef IPMI_INTF_LANPLUS
|
||||||
|
void ipmi_intf_session_set_cipher_suite_id(struct ipmi_intf * intf,
|
||||||
|
enum cipher_suite_ids cipher_suite_id);
|
||||||
|
#endif /* IPMI_INTF_LANPLUS */
|
||||||
void ipmi_intf_session_set_sol_escape_char(struct ipmi_intf * intf, char sol_escape_char);
|
void ipmi_intf_session_set_sol_escape_char(struct ipmi_intf * intf, char sol_escape_char);
|
||||||
void ipmi_intf_session_set_kgkey(struct ipmi_intf * intf, char * kgkey);
|
void ipmi_intf_session_set_kgkey(struct ipmi_intf *intf, const uint8_t *kgkey);
|
||||||
void ipmi_intf_session_set_port(struct ipmi_intf * intf, int port);
|
void ipmi_intf_session_set_port(struct ipmi_intf * intf, int port);
|
||||||
void ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype);
|
void ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype);
|
||||||
void ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout);
|
void ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout);
|
||||||
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry);
|
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry);
|
||||||
|
void ipmi_intf_session_cleanup(struct ipmi_intf *intf);
|
||||||
void ipmi_cleanup(struct ipmi_intf * intf);
|
void ipmi_cleanup(struct ipmi_intf * intf);
|
||||||
|
|
||||||
#endif /* IPMI_INTF_H */
|
#if defined(IPMI_INTF_LAN) || defined (IPMI_INTF_LANPLUS)
|
||||||
|
int ipmi_intf_socket_connect(struct ipmi_intf * intf);
|
||||||
|
#endif
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_ISOL_H
|
#pragma once
|
||||||
#define IPMI_ISOL_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -41,16 +40,15 @@
|
|||||||
|
|
||||||
#define ISOL_ENABLE_PARAM 0x01
|
#define ISOL_ENABLE_PARAM 0x01
|
||||||
#define ISOL_AUTHENTICATION_PARAM 0x02
|
#define ISOL_AUTHENTICATION_PARAM 0x02
|
||||||
#define ISOL_ENABLE_FLAG 0x01
|
|
||||||
#define ISOL_PRIVILEGE_LEVEL_USER 0x02
|
|
||||||
#define ISOL_BAUD_RATE_PARAM 0x05
|
#define ISOL_BAUD_RATE_PARAM 0x05
|
||||||
#define ISOL_BAUD_RATE_9600 0x06
|
|
||||||
#define ISOL_BAUD_RATE_19200 0x07
|
#define ISOL_PREFERRED_BAUD_RATE 0x07
|
||||||
#define ISOL_BAUD_RATE_38400 0x08
|
|
||||||
#define ISOL_BAUD_RATE_57600 0x09
|
struct isol_config_parameters {
|
||||||
#define ISOL_BAUD_RATE_115200 0x0A
|
uint8_t enabled;
|
||||||
#define ISOL_PREFERRED_BAUD_RATE 0x07
|
uint8_t privilege_level;
|
||||||
|
uint8_t bit_rate;
|
||||||
|
};
|
||||||
|
|
||||||
int ipmi_isol_main(struct ipmi_intf *, int, char **);
|
int ipmi_isol_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
#endif /* IPMI_SOL_H */
|
|
@ -1,45 +1,43 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 Kontron Canada, Inc. All Rights Reserved.
|
* Copyright (c) 2004 Kontron Canada, Inc. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Base on code from
|
* Base on code from
|
||||||
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* Redistribution of source code must retain the above copyright
|
* Redistribution of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* Redistribution in binary form must reproduce the above copyright
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* Neither the name of Sun Microsystems, Inc. or the names of
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
* contributors may be used to endorse or promote products derived
|
* contributors may be used to endorse or promote products derived
|
||||||
* from this software without specific prior written permission.
|
* from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* This software is provided "AS IS," without a warranty of any kind.
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_KONTRONOEM_H
|
#pragma once
|
||||||
#define IPMI_KONTRONOEM_H
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include <inttypes.h>
|
#include <ipmitool/ipmi.h>
|
||||||
#include <ipmitool/ipmi.h>
|
|
||||||
|
|
||||||
|
int ipmi_kontronoem_main(struct ipmi_intf *, int, char **);
|
||||||
int ipmi_kontronoem_main(struct ipmi_intf *, int, char **);
|
int ipmi_kontronoem_set_large_buffer(struct ipmi_intf *, unsigned char size);
|
||||||
|
|
||||||
#endif /* IPMI_KONTRONOEM_H */
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_LANP_H
|
#pragma once
|
||||||
#define IPMI_LANP_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -50,6 +49,13 @@
|
|||||||
#define IPMI_LANP_WRITE_LOCK 1
|
#define IPMI_LANP_WRITE_LOCK 1
|
||||||
#define IPMI_LANP_WRITE_COMMIT 2
|
#define IPMI_LANP_WRITE_COMMIT 2
|
||||||
|
|
||||||
|
#define IPMI_LANP_VLAN_ID_MAX 4094
|
||||||
|
#define IPMI_LANP_VLAN_ID_MIN 1
|
||||||
|
#define IPMI_LANP_VLAN_DISABLE 0 /* ID 0 = VLAN is disabled for the channel */
|
||||||
|
|
||||||
|
#define IPMI_LANP_IS_VLAN_VALID(x) \
|
||||||
|
((x) >= IPMI_LANP_VLAN_ID_MIN && (x) <= IPMI_LANP_VLAN_ID_MAX)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
IPMI_LANP_SET_IN_PROGRESS,
|
IPMI_LANP_SET_IN_PROGRESS,
|
||||||
IPMI_LANP_AUTH_TYPE,
|
IPMI_LANP_AUTH_TYPE,
|
||||||
@ -76,6 +82,39 @@ enum {
|
|||||||
IPMI_LANP_RMCP_CIPHER_SUPPORT,
|
IPMI_LANP_RMCP_CIPHER_SUPPORT,
|
||||||
IPMI_LANP_RMCP_CIPHERS,
|
IPMI_LANP_RMCP_CIPHERS,
|
||||||
IPMI_LANP_RMCP_PRIV_LEVELS,
|
IPMI_LANP_RMCP_PRIV_LEVELS,
|
||||||
|
IPMI_LANP_VLAN_TAGS,
|
||||||
|
IPMI_LANP_BAD_PASS_THRESH,
|
||||||
|
IPMI_LANP_IP6_SUPPORT=50,
|
||||||
|
IPMI_LANP_IP6_ENABLES,
|
||||||
|
IPMI_LANP_IP6_TRAFFIC_CLASS,
|
||||||
|
IPMI_LANP_IP6_STATIC_HOPS,
|
||||||
|
IPMI_LANP_IP6_FLOW_LABEL,
|
||||||
|
IPMI_LANP_IP6_STATUS,
|
||||||
|
IPMI_LANP_IP6_STATIC_ADDR,
|
||||||
|
IPMI_LANP_IP6_STATIC_DUID_STG,
|
||||||
|
IPMI_LANP_IP6_STATIC_DUID,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_ADDR,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_DUID_STG,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_DUID,
|
||||||
|
IPMI_LANP_IP6_DHCP6_CFG_SUP,
|
||||||
|
IPMI_LANP_IP6_DHCP6_CFG,
|
||||||
|
IPMI_LANP_IP6_ROUTER_CFG,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR1_ADDR,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR1_MAC,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR1_PFX_LEN,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR1_PFX,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR2_ADDR,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR2_MAC,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR2_PFX_LEN,
|
||||||
|
IPMI_LANP_IP6_STATIC_RTR2_PFX,
|
||||||
|
IPMI_LANP_IP6_NUM_DYNAMIC_RTRS,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_RTR_ADDR,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_RTR_MAC,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_RTR_PFX_LEN,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_RTR_PFX,
|
||||||
|
IPMI_LANP_IP6_DYNAMIC_HOPS,
|
||||||
|
IPMI_LANP_IP6_NDSLAAC_CFG_SUP,
|
||||||
|
IPMI_LANP_IP6_NDSLAAC_CFG,
|
||||||
IPMI_LANP_OEM_ALERT_STRING=96,
|
IPMI_LANP_OEM_ALERT_STRING=96,
|
||||||
IPMI_LANP_ALERT_RETRY=97,
|
IPMI_LANP_ALERT_RETRY=97,
|
||||||
IPMI_LANP_UTC_OFFSET=98,
|
IPMI_LANP_UTC_OFFSET=98,
|
||||||
@ -85,48 +124,6 @@ enum {
|
|||||||
IPMI_LANP_CHAN_ACCESS_MODE=201,
|
IPMI_LANP_CHAN_ACCESS_MODE=201,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct lan_param {
|
|
||||||
int cmd;
|
|
||||||
int size;
|
|
||||||
char desc[24];
|
|
||||||
uint8_t * data;
|
|
||||||
int data_len;
|
|
||||||
} ipmi_lan_params[] __attribute__((unused)) = {
|
|
||||||
{ IPMI_LANP_SET_IN_PROGRESS, 1, "Set in Progress" },
|
|
||||||
{ IPMI_LANP_AUTH_TYPE, 1, "Auth Type Support" },
|
|
||||||
{ IPMI_LANP_AUTH_TYPE_ENABLE, 5, "Auth Type Enable" },
|
|
||||||
{ IPMI_LANP_IP_ADDR, 4, "IP Address" },
|
|
||||||
{ IPMI_LANP_IP_ADDR_SRC, 1, "IP Address Source" },
|
|
||||||
{ IPMI_LANP_MAC_ADDR, 6, "MAC Address" }, /* 5 */
|
|
||||||
{ IPMI_LANP_SUBNET_MASK, 4, "Subnet Mask" },
|
|
||||||
{ IPMI_LANP_IP_HEADER, 3, "IP Header" },
|
|
||||||
{ IPMI_LANP_PRI_RMCP_PORT, 2, "Primary RMCP Port" },
|
|
||||||
{ IPMI_LANP_SEC_RMCP_PORT, 2, "Secondary RMCP Port" },
|
|
||||||
{ IPMI_LANP_BMC_ARP, 1, "BMC ARP Control" }, /* 10 */
|
|
||||||
{ IPMI_LANP_GRAT_ARP, 1, "Gratituous ARP Intrvl" },
|
|
||||||
{ IPMI_LANP_DEF_GATEWAY_IP, 4, "Default Gateway IP" },
|
|
||||||
{ IPMI_LANP_DEF_GATEWAY_MAC, 6, "Default Gateway MAC" },
|
|
||||||
{ IPMI_LANP_BAK_GATEWAY_IP, 4, "Backup Gateway IP" },
|
|
||||||
{ IPMI_LANP_BAK_GATEWAY_MAC, 6, "Backup Gateway MAC" }, /* 15 */
|
|
||||||
{ IPMI_LANP_SNMP_STRING, 18, "SNMP Community String" },
|
|
||||||
{ IPMI_LANP_NUM_DEST, 1, "Number of Destinations"},
|
|
||||||
{ IPMI_LANP_DEST_TYPE, 4, "Destination Type" },
|
|
||||||
{ IPMI_LANP_DEST_ADDR, 13, "Destination Addresses" },
|
|
||||||
{ IPMI_LANP_VLAN_ID, 2, "802.1q VLAN ID" }, /* 20 */
|
|
||||||
{ IPMI_LANP_VLAN_PRIORITY, 1, "802.1q VLAN Priority" },
|
|
||||||
{ IPMI_LANP_RMCP_CIPHER_SUPPORT,1, "RMCP+ Cipher Suite Count" },
|
|
||||||
{ IPMI_LANP_RMCP_CIPHERS, 16, "RMCP+ Cipher Suites" },
|
|
||||||
{ IPMI_LANP_RMCP_PRIV_LEVELS, 9, "Cipher Suite Priv Max" },
|
|
||||||
{ IPMI_LANP_OEM_ALERT_STRING, 28, "OEM Alert String" }, /* 25 */
|
|
||||||
{ IPMI_LANP_ALERT_RETRY, 1, "Alert Retry Algorithm" },
|
|
||||||
{ IPMI_LANP_UTC_OFFSET, 3, "UTC Offset" },
|
|
||||||
{ IPMI_LANP_DHCP_SERVER_IP, 4, "DHCP Server IP" },
|
|
||||||
{ IPMI_LANP_DHCP_SERVER_MAC, 6, "DHDP Server MAC" },
|
|
||||||
{ IPMI_LANP_DHCP_ENABLE, 1, "DHCP Enable" }, /* 30 */
|
|
||||||
{ IPMI_LANP_CHAN_ACCESS_MODE, 2, "Channel Access Mode" },
|
|
||||||
{ -1 }
|
|
||||||
};
|
|
||||||
|
|
||||||
int ipmi_lanp_main(struct ipmi_intf *, int, char **);
|
int ipmi_lanp_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
#endif /*IPMI_LANP_H*/
|
uint8_t find_lan_channel(struct ipmi_intf *intf, uint8_t start);
|
52
include/ipmitool/ipmi_lanp6.h
Normal file
52
include/ipmitool/ipmi_lanp6.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016 Pentair Technical Products. All right reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Pentair Technical Products or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||||
|
* PENTAIR TECHNICAL SOLUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ipmitool/ipmi_intf.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LAN configuration parameter.
|
||||||
|
*/
|
||||||
|
struct ipmi_lanp {
|
||||||
|
int selector;
|
||||||
|
const char *name;
|
||||||
|
int size;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Private data for LAN configuration.
|
||||||
|
*/
|
||||||
|
struct ipmi_lanp_priv {
|
||||||
|
struct ipmi_intf *intf;
|
||||||
|
int channel;
|
||||||
|
};
|
@ -30,13 +30,10 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_MAIN_H
|
#pragma once
|
||||||
#define IPMI_MAIN_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi_intf.h>
|
#include <ipmitool/ipmi_intf.h>
|
||||||
|
|
||||||
int ipmi_main(int argc, char ** argv, struct ipmi_cmd * cmdlist, struct ipmi_intf_support * intflist);
|
int ipmi_main(int argc, char ** argv, struct ipmi_cmd * cmdlist, struct ipmi_intf_support * intflist);
|
||||||
void ipmi_cmd_print(struct ipmi_cmd * cmdlist);
|
void ipmi_cmd_print(struct ipmi_cmd * cmdlist);
|
||||||
int ipmi_cmd_run(struct ipmi_intf * intf, char * name, int argc, char ** argv);
|
int ipmi_cmd_run(struct ipmi_intf * intf, char * name, int argc, char ** argv);
|
||||||
|
|
||||||
#endif /* IPMI_MAIN_H */
|
|
341
include/ipmitool/ipmi_mc.h
Normal file
341
include/ipmitool/ipmi_mc.h
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/helper.h>
|
||||||
|
#include <ipmitool/ipmi_strings.h>
|
||||||
|
|
||||||
|
#define OEM_MFG_STRING(oem) val2str(IPM_DEV_MANUFACTURER_ID(oem),\
|
||||||
|
ipmi_oem_info)
|
||||||
|
#define OEM_PROD_STRING(oem, p) oemval2str(IPM_DEV_MANUFACTURER_ID(oem),\
|
||||||
|
ipmi16toh(p),\
|
||||||
|
ipmi_oem_product_info)
|
||||||
|
|
||||||
|
#define BMC_GET_DEVICE_ID 0x01
|
||||||
|
#define BMC_COLD_RESET 0x02
|
||||||
|
#define BMC_WARM_RESET 0x03
|
||||||
|
#define BMC_GET_SELF_TEST 0x04
|
||||||
|
#define BMC_RESET_WATCHDOG_TIMER 0x22
|
||||||
|
#define BMC_SET_WATCHDOG_TIMER 0x24
|
||||||
|
#define BMC_GET_WATCHDOG_TIMER 0x25
|
||||||
|
#define BMC_SET_GLOBAL_ENABLES 0x2e
|
||||||
|
#define BMC_GET_GLOBAL_ENABLES 0x2f
|
||||||
|
#define BMC_GET_GUID 0x37
|
||||||
|
|
||||||
|
int ipmi_mc_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Response data from IPM Get Device ID Command (IPMI rev 1.5, section 17.1)
|
||||||
|
* The following really apply to any IPM device, not just BMCs...
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct ipm_devid_rsp {
|
||||||
|
uint8_t device_id;
|
||||||
|
uint8_t device_revision;
|
||||||
|
uint8_t fw_rev1;
|
||||||
|
uint8_t fw_rev2;
|
||||||
|
uint8_t ipmi_version;
|
||||||
|
uint8_t adtl_device_support;
|
||||||
|
uint8_t manufacturer_id[3];
|
||||||
|
uint8_t product_id[2];
|
||||||
|
uint8_t aux_fw_rev[4];
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IPM_DEV_DEVICE_ID_SDR_MASK (0x80) /* 1 = provides SDRs */
|
||||||
|
#define IPM_DEV_DEVICE_ID_REV_MASK (0x0F) /* BCD-enoded */
|
||||||
|
|
||||||
|
#define IPM_DEV_FWREV1_AVAIL_MASK (0x80) /* 0 = normal operation */
|
||||||
|
#define IPM_DEV_FWREV1_MAJOR_MASK (0x7f) /* Major rev, BCD-encoded */
|
||||||
|
|
||||||
|
#define IPM_DEV_IPMI_VER_MAJOR_MASK (0x0F) /* Major rev, BCD-encoded */
|
||||||
|
#define IPM_DEV_IPMI_VER_MINOR_MASK (0xF0) /* Minor rev, BCD-encoded */
|
||||||
|
#define IPM_DEV_IPMI_VER_MINOR_SHIFT (4) /* Minor rev shift */
|
||||||
|
#define IPM_DEV_IPMI_VERSION_MAJOR(x) \
|
||||||
|
(x & IPM_DEV_IPMI_VER_MAJOR_MASK)
|
||||||
|
#define IPM_DEV_IPMI_VERSION_MINOR(x) \
|
||||||
|
((x & IPM_DEV_IPMI_VER_MINOR_MASK) >> IPM_DEV_IPMI_VER_MINOR_SHIFT)
|
||||||
|
|
||||||
|
#define IPM_DEV_MANUFACTURER_ID_RESERVED 0x0FFFFF
|
||||||
|
#define IPM_DEV_MANUFACTURER_ID(x) ipmi24toh(x)
|
||||||
|
|
||||||
|
#define IPM_DEV_ADTL_SUPPORT_BITS (8)
|
||||||
|
|
||||||
|
/* There are lots of BMC implementations that don't follow the IPMI
|
||||||
|
* specification for GUID encoding. Some send data encoded as in
|
||||||
|
* RFC4122, some follow SMBIOS specification. We support all users
|
||||||
|
* of those buggy implementations here.
|
||||||
|
*
|
||||||
|
* Most implementations like AMI MegaRAC do it the SMBIOS way.
|
||||||
|
* This is the legacy behavior we don't want to break yet.
|
||||||
|
* That's why the last real mode is GUID_SMBIOS. If automatic
|
||||||
|
* detection finds more than one possible candidate, and
|
||||||
|
* GUID_SMBIOS is one of them, then it will take precedence.
|
||||||
|
*
|
||||||
|
* For the same reason GUID_IPMI is right before GUID_SMBIOS.
|
||||||
|
* If both RFC4122 and IPMI encodings have a valid version
|
||||||
|
* field, then IPMI takes precedence.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
/* Real modes, in reverse precedence order */
|
||||||
|
GUID_RFC4122,
|
||||||
|
GUID_IPMI,
|
||||||
|
GUID_SMBIOS,
|
||||||
|
GUID_REAL_MODES, /* Real mode count*/
|
||||||
|
/* Pseudo modes start here */
|
||||||
|
GUID_AUTO = GUID_REAL_MODES, /* Automatically detect mode */
|
||||||
|
GUID_DUMP, /* Just dump the data */
|
||||||
|
GUID_TOTAL_MODES
|
||||||
|
} ipmi_guid_mode_t;
|
||||||
|
|
||||||
|
#define GUID_NODE_SZ 6
|
||||||
|
|
||||||
|
#define GUID_VER_MASK 0x0F
|
||||||
|
#define GUID_VER_SHIFT 12
|
||||||
|
#define GUID_VERSION(t_hi) (((t_hi) >> GUID_VER_SHIFT) & GUID_VER_MASK)
|
||||||
|
#define GUID_TIME_HI(t_hi) ((t_hi) & ~(GUID_VER_MASK << GUID_VER_SHIFT))
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GUID_VERSION_UNKNOWN = 0, /* Not valid according to any specification */
|
||||||
|
|
||||||
|
/* The following are according to IPMI/SMBIOS/RFC4122 */
|
||||||
|
GUID_VERSION_TIME, /* Time-based, recommended for IPMI */
|
||||||
|
GUID_VERSION_DCE, /* DCE Security with POSIX UIDs, not for IPMI */
|
||||||
|
GUID_VERSION_MD5, /* Name-based, using MD5 */
|
||||||
|
GUID_VERSION_RND, /* Randomly generated */
|
||||||
|
GUID_VERSION_SHA1, /* Name-based, using SHA-1 */
|
||||||
|
|
||||||
|
GUID_VERSION_MAX = GUID_VERSION_SHA1, /* The maximum supported version */
|
||||||
|
GUID_VERSION_COUNT /* The number of supported versions */
|
||||||
|
} guid_version_t;
|
||||||
|
|
||||||
|
static inline bool is_guid_version_valid(guid_version_t ver)
|
||||||
|
{
|
||||||
|
return (ver > GUID_VERSION_UNKNOWN) && (ver <= GUID_VERSION_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The structure follows IPMI v2.0, rev 1.1
|
||||||
|
* See section 20.8 */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
typedef struct {
|
||||||
|
uint8_t node[GUID_NODE_SZ]; /* Byte 0 is LSB */
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint8_t clock_seq_low; /* clock sequence low field */
|
||||||
|
uint8_t clock_seq_hi_and_rsvd;/* clock sequence high field */
|
||||||
|
};
|
||||||
|
uint16_t clock_seq_and_rsvd;
|
||||||
|
};
|
||||||
|
uint16_t time_hi_and_version; /* timestamp high field and version number */
|
||||||
|
uint16_t time_mid; /* timestamp middle field */
|
||||||
|
uint32_t time_low; /* timestamp low field */
|
||||||
|
} ATTRIBUTE_PACKING ipmi_guid_t;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The structure follows RFC4122 (section 4.1.2)
|
||||||
|
* and SMBIOS v3.0.0 (section 7.2.1) */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
typedef struct {
|
||||||
|
uint32_t time_low; /* timestamp low field */
|
||||||
|
uint16_t time_mid; /* timestamp middle field */
|
||||||
|
uint16_t time_hi_and_version; /* timestamp high field and version number */
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint8_t clock_seq_hi_and_rsvd;/* clock sequence high field */
|
||||||
|
uint8_t clock_seq_low; /* clock sequence low field */
|
||||||
|
};
|
||||||
|
uint16_t clock_seq_and_rsvd;
|
||||||
|
};
|
||||||
|
uint8_t node[GUID_NODE_SZ]; /* Byte 0 is MSB */
|
||||||
|
} ATTRIBUTE_PACKING rfc_guid_t;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Parsed GUID structure */
|
||||||
|
typedef struct {
|
||||||
|
uint8_t node[GUID_NODE_SZ]; /* MSB first */
|
||||||
|
/* These are architecture-specific for easy output with printf() */
|
||||||
|
uint16_t clock_seq_and_rsvd;
|
||||||
|
uint64_t time_hi_and_version;
|
||||||
|
uint64_t time_mid;
|
||||||
|
uint64_t time_low;
|
||||||
|
/* These are the parsed values */
|
||||||
|
time_t time;
|
||||||
|
ipmi_guid_mode_t mode;
|
||||||
|
guid_version_t ver; /* Version from time_hi_and_version, if valid */
|
||||||
|
} parsed_guid_t;
|
||||||
|
|
||||||
|
parsed_guid_t ipmi_parse_guid(void *guid, ipmi_guid_mode_t guid_mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a binary GUID/UUID to a canonical hex string form.
|
||||||
|
* If the version/encoding of the source data is unknown,
|
||||||
|
* dump the source data as a simple hex string.
|
||||||
|
*
|
||||||
|
* @param[out] str The string representation of GUID
|
||||||
|
* @param[in] data The source binary GUID data
|
||||||
|
* @param[in] mode The conversion mode, use GUID_AUTO for automatic detection
|
||||||
|
*
|
||||||
|
* @returns The parsed GUID structure
|
||||||
|
*/
|
||||||
|
parsed_guid_t
|
||||||
|
ipmi_guid2str(char *str, const void *data, ipmi_guid_mode_t mode);
|
||||||
|
#define GUID_STR_MAXLEN 36 /* 8+4+4+4+12 bytes plus the dashes */
|
||||||
|
|
||||||
|
int _ipmi_mc_get_guid(struct ipmi_intf *intf, ipmi_guid_t *guid);
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct ipm_selftest_rsp {
|
||||||
|
unsigned char code;
|
||||||
|
unsigned char test;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IPM_SFT_CODE_OK 0x55
|
||||||
|
#define IPM_SFT_CODE_NOT_IMPLEMENTED 0x56
|
||||||
|
#define IPM_SFT_CODE_DEV_CORRUPTED 0x57
|
||||||
|
#define IPM_SFT_CODE_FATAL_ERROR 0x58
|
||||||
|
#define IPM_SFT_CODE_RESERVED 0xff
|
||||||
|
|
||||||
|
#define IPM_SELFTEST_SEL_ERROR 0x80
|
||||||
|
#define IPM_SELFTEST_SDR_ERROR 0x40
|
||||||
|
#define IPM_SELFTEST_FRU_ERROR 0x20
|
||||||
|
#define IPM_SELFTEST_IPMB_ERROR 0x10
|
||||||
|
#define IPM_SELFTEST_SDRR_EMPTY 0x08
|
||||||
|
#define IPM_SELFTEST_INTERNAL_USE 0x04
|
||||||
|
#define IPM_SELFTEST_FW_BOOTBLOCK 0x02
|
||||||
|
#define IPM_SELFTEST_FW_CORRUPTED 0x01
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct ipm_get_watchdog_rsp {
|
||||||
|
unsigned char use;
|
||||||
|
unsigned char intr_action;
|
||||||
|
unsigned char pre_timeout;
|
||||||
|
unsigned char exp_flags;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
unsigned char initial_countdown_lsb;
|
||||||
|
unsigned char initial_countdown_msb;
|
||||||
|
};
|
||||||
|
uint16_t init_cnt_le;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
unsigned char present_countdown_lsb;
|
||||||
|
unsigned char present_countdown_msb;
|
||||||
|
};
|
||||||
|
uint16_t pres_cnt_le;
|
||||||
|
};
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IPM_WATCHDOG_RESET_ERROR 0x80
|
||||||
|
|
||||||
|
#define IPM_WATCHDOG_BIOS_FRB2 0x01
|
||||||
|
#define IPM_WATCHDOG_BIOS_POST 0x02
|
||||||
|
#define IPM_WATCHDOG_OS_LOAD 0x03
|
||||||
|
#define IPM_WATCHDOG_SMS_OS 0x04
|
||||||
|
#define IPM_WATCHDOG_OEM 0x05
|
||||||
|
|
||||||
|
#define IPM_WATCHDOG_NO_ACTION 0x00
|
||||||
|
#define IPM_WATCHDOG_HARD_RESET 0x01
|
||||||
|
#define IPM_WATCHDOG_POWER_DOWN 0x02
|
||||||
|
#define IPM_WATCHDOG_POWER_CYCLE 0x03
|
||||||
|
|
||||||
|
#define IPM_WATCHDOG_CLEAR_OEM 0x20
|
||||||
|
#define IPM_WATCHDOG_CLEAR_SMS_OS 0x10
|
||||||
|
#define IPM_WATCHDOG_CLEAR_OS_LOAD 0x08
|
||||||
|
#define IPM_WATCHDOG_CLEAR_BIOS_POST 0x04
|
||||||
|
#define IPM_WATCHDOG_CLEAR_BIOS_FRB2 0x02
|
||||||
|
|
||||||
|
/* Use */
|
||||||
|
#define IPMI_WDT_USE_NOLOG_SHIFT 7
|
||||||
|
#define IPMI_WDT_USE_DONTSTOP_SHIFT 6 /* For 'set' */
|
||||||
|
#define IPMI_WDT_USE_RUNNING_SHIFT 6 /* For 'get' */
|
||||||
|
#define IPMI_WDT_USE_SHIFT 0
|
||||||
|
#define IPMI_WDT_USE_MASK 0x07
|
||||||
|
|
||||||
|
/* Pre-timeout interrupt type */
|
||||||
|
#define IPMI_WDT_INTR_SHIFT 4
|
||||||
|
#define IPMI_WDT_INTR_MASK 0x07 /* Apply to the intr value, not to the data byte */
|
||||||
|
|
||||||
|
/* Action */
|
||||||
|
#define IPMI_WDT_ACTION_SHIFT 0
|
||||||
|
#define IPMI_WDT_ACTION_MASK 0x07
|
||||||
|
|
||||||
|
#define IPMI_WDT_GET(b, s) (((b) >> (IPMI_WDT_##s##_SHIFT)) & (IPMI_WDT_##s##_MASK))
|
||||||
|
|
||||||
|
#define IS_WDT_BIT(b, s) IS_SET((b), IPMI_WDT_##s##_SHIFT)
|
||||||
|
|
||||||
|
/* IPMI 2.0 command for system information*/
|
||||||
|
#define IPMI_SET_SYS_INFO 0x58
|
||||||
|
#define IPMI_GET_SYS_INFO 0x59
|
||||||
|
#define IPMI_SYSINFO_SET0_SIZE 14
|
||||||
|
#define IPMI_SYSINFO_SETN_SIZE 16
|
||||||
|
|
||||||
|
/* System Information "Parameter selector" values: */
|
||||||
|
#define IPMI_SYSINFO_SET_STATE 0x00
|
||||||
|
#define IPMI_SYSINFO_SYSTEM_FW_VERSION 0x01
|
||||||
|
#define IPMI_SYSINFO_HOSTNAME 0x02
|
||||||
|
#define IPMI_SYSINFO_PRIMARY_OS_NAME 0x03
|
||||||
|
#define IPMI_SYSINFO_OS_NAME 0x04
|
||||||
|
#define IPMI_SYSINFO_DELL_OS_VERSION 0xe4
|
||||||
|
#define IPMI_SYSINFO_DELL_URL 0xde
|
||||||
|
#define IPMI_SYSINFO_DELL_IPV6_COUNT 0xe6
|
||||||
|
#define IPMI_SYSINFO_DELL_IPV6_DESTADDR 0xf0
|
||||||
|
|
||||||
|
int ipmi_mc_getsysinfo(struct ipmi_intf * intf, int param, int block, int set,
|
||||||
|
int len, void *buffer);
|
||||||
|
int ipmi_mc_setsysinfo(struct ipmi_intf * intf, int len, void *buffer);
|
@ -28,8 +28,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_OEM_H
|
#pragma once
|
||||||
#define IPMI_OEM_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -43,5 +42,3 @@ struct ipmi_oem_handle {
|
|||||||
void ipmi_oem_print(void);
|
void ipmi_oem_print(void);
|
||||||
int ipmi_oem_setup(struct ipmi_intf * intf, char * oemtype);
|
int ipmi_oem_setup(struct ipmi_intf * intf, char * oemtype);
|
||||||
int ipmi_oem_active(struct ipmi_intf * intf, const char * oemtype);
|
int ipmi_oem_active(struct ipmi_intf * intf, const char * oemtype);
|
||||||
|
|
||||||
#endif /*IPMI_OEM_H*/
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF DELL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF DELL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_PEF_H
|
#pragma once
|
||||||
#define IPMI_PEF_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -40,7 +39,7 @@
|
|||||||
struct pef_capabilities { /* "get pef capabilities" response */
|
struct pef_capabilities { /* "get pef capabilities" response */
|
||||||
uint8_t version;
|
uint8_t version;
|
||||||
uint8_t actions; /* mapped by PEF_ACTION_xxx */
|
uint8_t actions; /* mapped by PEF_ACTION_xxx */
|
||||||
uint8_t tblsize;
|
uint8_t event_filter_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -50,6 +49,9 @@ typedef enum {
|
|||||||
P_ABLE,
|
P_ABLE,
|
||||||
} flg_e;
|
} flg_e;
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_table_entry {
|
struct pef_table_entry {
|
||||||
#define PEF_CONFIG_ENABLED 0x80
|
#define PEF_CONFIG_ENABLED 0x80
|
||||||
#define PEF_CONFIG_PRECONFIGURED 0x40
|
#define PEF_CONFIG_PRECONFIGURED 0x40
|
||||||
@ -90,7 +92,10 @@ struct pef_table_entry {
|
|||||||
uint8_t event_data_3_AND_mask;
|
uint8_t event_data_3_AND_mask;
|
||||||
uint8_t event_data_3_compare_1;
|
uint8_t event_data_3_compare_1;
|
||||||
uint8_t event_data_3_compare_2;
|
uint8_t event_data_3_compare_2;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct desc_map { /* maps a description to a value/mask */
|
struct desc_map { /* maps a description to a value/mask */
|
||||||
const char *desc;
|
const char *desc;
|
||||||
@ -105,228 +110,14 @@ struct bit_desc_map { /* description text container */
|
|||||||
struct desc_map desc_maps[128];
|
struct desc_map desc_maps[128];
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_actions __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_ALL,
|
|
||||||
{ {"Alert", PEF_ACTION_ALERT},
|
|
||||||
{"Power-off", PEF_ACTION_POWER_DOWN},
|
|
||||||
{"Reset", PEF_ACTION_RESET},
|
|
||||||
{"Power-cycle", PEF_ACTION_POWER_CYCLE},
|
|
||||||
{"OEM-defined", PEF_ACTION_OEM},
|
|
||||||
{"Diagnostic-interrupt", PEF_ACTION_DIAGNOSTIC_INTERRUPT},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_severities __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_ANY,
|
|
||||||
{ {"Non-recoverable", PEF_SEVERITY_NON_RECOVERABLE},
|
|
||||||
{"Critical", PEF_SEVERITY_CRITICAL},
|
|
||||||
{"Warning", PEF_SEVERITY_WARNING},
|
|
||||||
{"OK", PEF_SEVERITY_OK},
|
|
||||||
{"Information", PEF_SEVERITY_INFORMATION},
|
|
||||||
{"Monitor", PEF_SEVERITY_MONITOR},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_sensortypes __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"Any", 255},
|
|
||||||
{"Temperature", 1},
|
|
||||||
{"Voltage", 2},
|
|
||||||
{"Current", 3},
|
|
||||||
{"Fan", 4},
|
|
||||||
{"Chassis Intrusion", 5},
|
|
||||||
{"Platform security breach", 6},
|
|
||||||
{"Processor", 7},
|
|
||||||
{"Power supply", 8},
|
|
||||||
{"Power Unit", 9},
|
|
||||||
{"Cooling device", 10},
|
|
||||||
{"Other (units-based)", 11},
|
|
||||||
{"Memory", 12},
|
|
||||||
{"Drive Slot", 13},
|
|
||||||
{"POST memory resize", 14},
|
|
||||||
{"POST error", 15},
|
|
||||||
{"Logging disabled", 16},
|
|
||||||
{"Watchdog 1", 17},
|
|
||||||
{"System event", 18},
|
|
||||||
{"Critical Interrupt", 19},
|
|
||||||
{"Button", 20},
|
|
||||||
{"Module/board", 21},
|
|
||||||
{"uController/coprocessor", 22},
|
|
||||||
{"Add-in card", 23},
|
|
||||||
{"Chassis", 24},
|
|
||||||
{"Chipset", 25},
|
|
||||||
{"Other (FRU)", 26},
|
|
||||||
{"Cable/interconnect", 27},
|
|
||||||
{"Terminator", 28},
|
|
||||||
{"System boot", 29},
|
|
||||||
{"Boot error", 30},
|
|
||||||
{"OS boot", 31},
|
|
||||||
{"OS critical stop", 32},
|
|
||||||
{"Slot/connector", 33},
|
|
||||||
{"ACPI power state", 34},
|
|
||||||
{"Watchdog 2", 35},
|
|
||||||
{"Platform alert", 36},
|
|
||||||
{"Entity presence", 37},
|
|
||||||
{"Monitor ASIC/IC", 38},
|
|
||||||
{"LAN", 39},
|
|
||||||
{"Management subsytem health",40},
|
|
||||||
{"Battery", 41},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_1 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"<LNC", 0}, /* '<' : getting worse */
|
|
||||||
{">LNC", 1}, /* '>' : getting better */
|
|
||||||
{"<LC", 2},
|
|
||||||
{">LC", 3},
|
|
||||||
{"<LNR", 4},
|
|
||||||
{">LNR", 5},
|
|
||||||
{">UNC", 6},
|
|
||||||
{"<UNC", 7},
|
|
||||||
{">UC", 8},
|
|
||||||
{"<UC", 9},
|
|
||||||
{">UNR", 10},
|
|
||||||
{"<UNR", 11},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_2 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"transition to idle", 0},
|
|
||||||
{"transition to active", 1},
|
|
||||||
{"transition to busy", 2},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_3 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"state deasserted", 0},
|
|
||||||
{"state asserted", 1},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_4 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"predictive failure deasserted", 0},
|
|
||||||
{"predictive failure asserted", 1},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_5 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"limit not exceeded", 0},
|
|
||||||
{"limit exceeded", 1},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_6 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"performance met", 0},
|
|
||||||
{"performance lags", 1},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_7 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"ok", 0},
|
|
||||||
{"<warn", 1}, /* '<' : getting worse */
|
|
||||||
{"<fail", 2},
|
|
||||||
{"<dead", 3},
|
|
||||||
{">warn", 4}, /* '>' : getting better */
|
|
||||||
{">fail", 5},
|
|
||||||
{"dead", 6},
|
|
||||||
{"monitor", 7},
|
|
||||||
{"informational", 8},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_8 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"device removed/absent", 0},
|
|
||||||
{"device inserted/present", 1},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_9 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"device disabled", 0},
|
|
||||||
{"device enabled", 1},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_10 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"transition to running", 0},
|
|
||||||
{"transition to in test", 1},
|
|
||||||
{"transition to power off", 2},
|
|
||||||
{"transition to online", 3},
|
|
||||||
{"transition to offline", 4},
|
|
||||||
{"transition to off duty", 5},
|
|
||||||
{"transition to degraded", 6},
|
|
||||||
{"transition to power save", 7},
|
|
||||||
{"install error", 8},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_11 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"fully redundant", 0},
|
|
||||||
{"redundancy lost", 1},
|
|
||||||
{"redundancy degraded", 2},
|
|
||||||
{"<non-redundant/sufficient", 3}, /* '<' : getting worse */
|
|
||||||
{">non-redundant/sufficient", 4}, /* '>' : getting better */
|
|
||||||
{"non-redundant/insufficient", 5},
|
|
||||||
{"<redundancy degraded", 6},
|
|
||||||
{">redundancy degraded", 7},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_gentype_12 = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"D0 power state", 0},
|
|
||||||
{"D1 power state", 1},
|
|
||||||
{"D2 power state", 2},
|
|
||||||
{"D3 power state", 3},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map *
|
|
||||||
pef_b2s_generic_ER[] __attribute__((unused)) = {
|
|
||||||
&pef_b2s_gentype_1,
|
|
||||||
&pef_b2s_gentype_2,
|
|
||||||
&pef_b2s_gentype_3,
|
|
||||||
&pef_b2s_gentype_4,
|
|
||||||
&pef_b2s_gentype_5,
|
|
||||||
&pef_b2s_gentype_6,
|
|
||||||
&pef_b2s_gentype_7,
|
|
||||||
&pef_b2s_gentype_8,
|
|
||||||
&pef_b2s_gentype_9,
|
|
||||||
&pef_b2s_gentype_10,
|
|
||||||
&pef_b2s_gentype_11,
|
|
||||||
&pef_b2s_gentype_12,
|
|
||||||
};
|
|
||||||
#define PEF_B2S_GENERIC_ER_ENTRIES \
|
|
||||||
(sizeof(pef_b2s_generic_ER) / sizeof(pef_b2s_generic_ER[0]))
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_policy_entry {
|
struct pef_policy_entry {
|
||||||
#define PEF_POLICY_ID_MASK 0xf0
|
#define PEF_POLICY_ID_MASK 0xf0
|
||||||
#define PEF_POLICY_ID_SHIFT 4
|
#define PEF_POLICY_ID_SHIFT 4
|
||||||
|
#define PEF_POLICY_DISABLED 0xF7
|
||||||
#define PEF_POLICY_ENABLED 0x08
|
#define PEF_POLICY_ENABLED 0x08
|
||||||
#define PEF_POLICY_FLAGS_MASK 0x07
|
#define PEF_POLICY_FLAGS_MASK 0x07
|
||||||
#define PEF_POLICY_FLAGS_MATCH_ALWAYS 0
|
#define PEF_POLICY_FLAGS_MATCH_ALWAYS 0
|
||||||
@ -341,49 +132,15 @@ struct pef_policy_entry {
|
|||||||
uint8_t chan_dest;
|
uint8_t chan_dest;
|
||||||
#define PEF_POLICY_EVENT_SPECIFIC 0x80
|
#define PEF_POLICY_EVENT_SPECIFIC 0x80
|
||||||
uint8_t alert_string_key;
|
uint8_t alert_string_key;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_policies __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"Match-always", PEF_POLICY_FLAGS_MATCH_ALWAYS},
|
|
||||||
{"Try-next-entry", PEF_POLICY_FLAGS_PREV_OK_SKIP},
|
|
||||||
{"Try-next-set", PEF_POLICY_FLAGS_PREV_OK_NEXT_POLICY_SET},
|
|
||||||
{"Try-next-channel", PEF_POLICY_FLAGS_PREV_OK_NEXT_CHANNEL_IN_SET},
|
|
||||||
{"Try-next-destination", PEF_POLICY_FLAGS_PREV_OK_NEXT_DESTINATION_IN_SET},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_ch_medium __attribute__((unused)) = {
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_IPMB 1
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_ICMB_10 2
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_ICMB_09 3
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_LAN 4
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_SERIAL 5
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_XLAN 6
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_PCI_SMBUS 7
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_SMBUS_V1X 8
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_SMBUS_V2X 9
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_USB_V1X 10
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_USB_V2X 11
|
|
||||||
#define PEF_CH_MEDIUM_TYPE_SYSTEM 12
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"IPMB (I2C)", PEF_CH_MEDIUM_TYPE_IPMB},
|
|
||||||
{"ICMB v1.0", PEF_CH_MEDIUM_TYPE_ICMB_10},
|
|
||||||
{"ICMB v0.9", PEF_CH_MEDIUM_TYPE_ICMB_09},
|
|
||||||
{"802.3 LAN", PEF_CH_MEDIUM_TYPE_LAN},
|
|
||||||
{"Serial/Modem (RS-232)", PEF_CH_MEDIUM_TYPE_SERIAL},
|
|
||||||
{"Other LAN", PEF_CH_MEDIUM_TYPE_XLAN},
|
|
||||||
{"PCI SMBus", PEF_CH_MEDIUM_TYPE_PCI_SMBUS},
|
|
||||||
{"SMBus v1.0/1.1", PEF_CH_MEDIUM_TYPE_SMBUS_V1X},
|
|
||||||
{"SMBus v2.0", PEF_CH_MEDIUM_TYPE_SMBUS_V2X},
|
|
||||||
{"USB 1.x", PEF_CH_MEDIUM_TYPE_USB_V1X},
|
|
||||||
{"USB 2.x", PEF_CH_MEDIUM_TYPE_USB_V2X},
|
|
||||||
{"System I/F (KCS,SMIC,BT)", PEF_CH_MEDIUM_TYPE_SYSTEM},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_selector {
|
struct pef_cfgparm_selector {
|
||||||
#define PEF_CFGPARM_ID_REVISION_ONLY_MASK 0x80
|
#define PEF_CFGPARM_ID_REVISION_ONLY_MASK 0x80
|
||||||
#define PEF_CFGPARM_ID_SET_IN_PROGRESS 0
|
#define PEF_CFGPARM_ID_SET_IN_PROGRESS 0
|
||||||
@ -403,32 +160,41 @@ struct pef_cfgparm_selector {
|
|||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t set;
|
uint8_t set;
|
||||||
uint8_t block;
|
uint8_t block;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_set_in_progress {
|
struct pef_cfgparm_set_in_progress {
|
||||||
#define PEF_SET_IN_PROGRESS_COMMIT_WRITE 0x02
|
#define PEF_SET_IN_PROGRESS_COMMIT_WRITE 0x02
|
||||||
#define PEF_SET_IN_PROGRESS 0x01
|
#define PEF_SET_IN_PROGRESS 0x01
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_control {
|
struct pef_cfgparm_control {
|
||||||
#define PEF_CONTROL_ENABLE_ALERT_STARTUP_DELAY 0x08
|
#define PEF_CONTROL_ENABLE_ALERT_STARTUP_DELAY 0x08
|
||||||
#define PEF_CONTROL_ENABLE_STARTUP_DELAY 0x04
|
#define PEF_CONTROL_ENABLE_STARTUP_DELAY 0x04
|
||||||
#define PEF_CONTROL_ENABLE_EVENT_MESSAGES 0x02
|
#define PEF_CONTROL_ENABLE_EVENT_MESSAGES 0x02
|
||||||
#define PEF_CONTROL_ENABLE 0x01
|
#define PEF_CONTROL_ENABLE 0x01
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_control __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_ALL,
|
|
||||||
{ {"PEF", PEF_CONTROL_ENABLE},
|
|
||||||
{"PEF event messages", PEF_CONTROL_ENABLE_EVENT_MESSAGES},
|
|
||||||
{"PEF startup delay", PEF_CONTROL_ENABLE_STARTUP_DELAY},
|
|
||||||
{"Alert startup delay", PEF_CONTROL_ENABLE_ALERT_STARTUP_DELAY},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_action {
|
struct pef_cfgparm_action {
|
||||||
#define PEF_ACTION_ENABLE_DIAGNOSTIC_INTERRUPT 0x20
|
#define PEF_ACTION_ENABLE_DIAGNOSTIC_INTERRUPT 0x20
|
||||||
#define PEF_ACTION_ENABLE_OEM 0x10
|
#define PEF_ACTION_ENABLE_OEM 0x10
|
||||||
@ -437,54 +203,116 @@ struct pef_cfgparm_action {
|
|||||||
#define PEF_ACTION_ENABLE_POWER_DOWN 0x02
|
#define PEF_ACTION_ENABLE_POWER_DOWN 0x02
|
||||||
#define PEF_ACTION_ENABLE_ALERT 0x01
|
#define PEF_ACTION_ENABLE_ALERT 0x01
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_startup_delay {
|
struct pef_cfgparm_startup_delay {
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_alert_startup_delay {
|
struct pef_cfgparm_alert_startup_delay {
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_filter_table_size {
|
struct pef_cfgparm_filter_table_size {
|
||||||
#define PEF_FILTER_TABLE_SIZE_MASK 0x7f
|
#define PEF_FILTER_TABLE_SIZE_MASK 0x7f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_filter_table_entry {
|
struct pef_cfgparm_filter_table_entry {
|
||||||
#define PEF_FILTER_TABLE_ID_MASK 0x7f
|
# define PEF_FILTER_DISABLED 0x7F
|
||||||
|
# define PEF_FILTER_ENABLED 0x80
|
||||||
|
# define PEF_FILTER_TABLE_ID_MASK 0x7F
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
struct pef_table_entry entry;
|
struct pef_table_entry entry;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_filter_table_data_1 {
|
struct pef_cfgparm_filter_table_data_1 {
|
||||||
uint8_t data1;
|
uint8_t id;
|
||||||
uint8_t data2;
|
uint8_t cfg;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_policy_table_size {
|
struct pef_cfgparm_policy_table_size {
|
||||||
#define PEF_POLICY_TABLE_SIZE_MASK 0x7f
|
#define PEF_POLICY_TABLE_SIZE_MASK 0x7f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_policy_table_entry {
|
struct pef_cfgparm_policy_table_entry {
|
||||||
#define PEF_POLICY_TABLE_ID_MASK 0x7f
|
#define PEF_POLICY_TABLE_ID_MASK 0x7f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
struct pef_policy_entry entry;
|
struct pef_policy_entry entry;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_system_guid {
|
struct pef_cfgparm_system_guid {
|
||||||
#define PEF_SYSTEM_GUID_USED_IN_PET 0x01
|
#define PEF_SYSTEM_GUID_USED_IN_PET 0x01
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
uint8_t guid[16];
|
uint8_t guid[16];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_alert_string_table_size {
|
struct pef_cfgparm_alert_string_table_size {
|
||||||
#define PEF_ALERT_STRING_TABLE_SIZE_MASK 0x7f
|
#define PEF_ALERT_STRING_TABLE_SIZE_MASK 0x7f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_alert_string_keys {
|
struct pef_cfgparm_alert_string_keys {
|
||||||
#define PEF_ALERT_STRING_ID_MASK 0x7f
|
#define PEF_ALERT_STRING_ID_MASK 0x7f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
@ -492,16 +320,27 @@ struct pef_cfgparm_alert_string_keys {
|
|||||||
uint8_t data2;
|
uint8_t data2;
|
||||||
#define PEF_ALERT_STRING_SET_ID_MASK 0x7f
|
#define PEF_ALERT_STRING_SET_ID_MASK 0x7f
|
||||||
uint8_t data3;
|
uint8_t data3;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_cfgparm_alert_string_table_entry {
|
struct pef_cfgparm_alert_string_table_entry {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t blockno;
|
uint8_t blockno;
|
||||||
uint8_t block[16];
|
uint8_t block[16];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* PEF - LAN */
|
/* PEF - LAN */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_lan_cfgparm_selector {
|
struct pef_lan_cfgparm_selector {
|
||||||
#define PEF_LAN_CFGPARM_CH_REVISION_ONLY_MASK 0x80
|
#define PEF_LAN_CFGPARM_CH_REVISION_ONLY_MASK 0x80
|
||||||
#define PEF_LAN_CFGPARM_CH_MASK 0x0f
|
#define PEF_LAN_CFGPARM_CH_MASK 0x0f
|
||||||
@ -513,13 +352,25 @@ struct pef_lan_cfgparm_selector {
|
|||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t set;
|
uint8_t set;
|
||||||
uint8_t block;
|
uint8_t block;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_lan_cfgparm_dest_size {
|
struct pef_lan_cfgparm_dest_size {
|
||||||
#define PEF_LAN_DEST_TABLE_SIZE_MASK 0x0f
|
#define PEF_LAN_DEST_TABLE_SIZE_MASK 0x0f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_lan_cfgparm_dest_type {
|
struct pef_lan_cfgparm_dest_type {
|
||||||
#define PEF_LAN_DEST_TYPE_ID_MASK 0x0f
|
#define PEF_LAN_DEST_TYPE_ID_MASK 0x0f
|
||||||
uint8_t dest;
|
uint8_t dest;
|
||||||
@ -532,18 +383,15 @@ struct pef_lan_cfgparm_dest_type {
|
|||||||
uint8_t alert_timeout;
|
uint8_t alert_timeout;
|
||||||
#define PEF_LAN_RETRIES_MASK 0x07
|
#define PEF_LAN_RETRIES_MASK 0x07
|
||||||
uint8_t retries;
|
uint8_t retries;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_lan_desttype __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"Acknowledged", PEF_LAN_DEST_TYPE_ACK},
|
|
||||||
{"PET", PEF_LAN_DEST_TYPE_PET},
|
|
||||||
{"OEM 1", PEF_LAN_DEST_TYPE_OEM_1},
|
|
||||||
{"OEM 2", PEF_LAN_DEST_TYPE_OEM_2},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_lan_cfgparm_dest_info {
|
struct pef_lan_cfgparm_dest_info {
|
||||||
#define PEF_LAN_DEST_MASK 0x0f
|
#define PEF_LAN_DEST_MASK 0x0f
|
||||||
uint8_t dest;
|
uint8_t dest;
|
||||||
@ -555,10 +403,15 @@ struct pef_lan_cfgparm_dest_info {
|
|||||||
uint8_t gateway;
|
uint8_t gateway;
|
||||||
uint8_t ip[4];
|
uint8_t ip[4];
|
||||||
uint8_t mac[6];
|
uint8_t mac[6];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* PEF - Serial/PPP */
|
/* PEF - Serial/PPP */
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_selector {
|
struct pef_serial_cfgparm_selector {
|
||||||
#define PEF_SERIAL_CFGPARM_CH_REVISION_ONLY_MASK 0x80
|
#define PEF_SERIAL_CFGPARM_CH_REVISION_ONLY_MASK 0x80
|
||||||
#define PEF_SERIAL_CFGPARM_CH_MASK 0x0f
|
#define PEF_SERIAL_CFGPARM_CH_MASK 0x0f
|
||||||
@ -573,13 +426,25 @@ struct pef_serial_cfgparm_selector {
|
|||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t set;
|
uint8_t set;
|
||||||
uint8_t block;
|
uint8_t block;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_dest_size {
|
struct pef_serial_cfgparm_dest_size {
|
||||||
#define PEF_SERIAL_DEST_TABLE_SIZE_MASK 0x0f
|
#define PEF_SERIAL_DEST_TABLE_SIZE_MASK 0x0f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_dest_info {
|
struct pef_serial_cfgparm_dest_info {
|
||||||
#define PEF_SERIAL_DEST_MASK 0x0f
|
#define PEF_SERIAL_DEST_MASK 0x0f
|
||||||
uint8_t dest;
|
uint8_t dest;
|
||||||
@ -608,46 +473,64 @@ struct pef_serial_cfgparm_dest_info {
|
|||||||
#define PEF_SERIAL_CALLBACK_IPADDR_ID_SHIFT 4
|
#define PEF_SERIAL_CALLBACK_IPADDR_ID_SHIFT 4
|
||||||
#define PEF_SERIAL_CALLBACK_ACCT_ID_MASK 0xf0
|
#define PEF_SERIAL_CALLBACK_ACCT_ID_MASK 0xf0
|
||||||
uint8_t data5;
|
uint8_t data5;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_serial_desttype __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"Acknowledged", PEF_SERIAL_DEST_TYPE_ACK},
|
|
||||||
{"TAP page", PEF_SERIAL_DEST_TYPE_TAP},
|
|
||||||
{"PPP PET", PEF_SERIAL_DEST_TYPE_PPP},
|
|
||||||
{"Basic callback", PEF_SERIAL_DEST_TYPE_BASIC_CALLBACK},
|
|
||||||
{"PPP callback", PEF_SERIAL_DEST_TYPE_PPP_CALLBACK},
|
|
||||||
{"OEM 1", PEF_SERIAL_DEST_TYPE_OEM_1},
|
|
||||||
{"OEM 2", PEF_SERIAL_DEST_TYPE_OEM_2},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_dial_string_count {
|
struct pef_serial_cfgparm_dial_string_count {
|
||||||
#define PEF_SERIAL_DIAL_STRING_COUNT_MASK 0x0f
|
#define PEF_SERIAL_DIAL_STRING_COUNT_MASK 0x0f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_dial_string {
|
struct pef_serial_cfgparm_dial_string {
|
||||||
#define PEF_SERIAL_DIAL_STRING_MASK 0x0f
|
#define PEF_SERIAL_DIAL_STRING_MASK 0x0f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
uint8_t data2;
|
uint8_t data2;
|
||||||
uint8_t data3;
|
uint8_t data3;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_tap_acct_count {
|
struct pef_serial_cfgparm_tap_acct_count {
|
||||||
#define PEF_SERIAL_TAP_ACCT_COUNT_MASK 0x0f
|
#define PEF_SERIAL_TAP_ACCT_COUNT_MASK 0x0f
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_tap_acct_info {
|
struct pef_serial_cfgparm_tap_acct_info {
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
#define PEF_SERIAL_TAP_ACCT_INFO_DIAL_STRING_ID_MASK 0xf0
|
#define PEF_SERIAL_TAP_ACCT_INFO_DIAL_STRING_ID_MASK 0xf0
|
||||||
#define PEF_SERIAL_TAP_ACCT_INFO_DIAL_STRING_ID_SHIFT 4
|
#define PEF_SERIAL_TAP_ACCT_INFO_DIAL_STRING_ID_SHIFT 4
|
||||||
#define PEF_SERIAL_TAP_ACCT_INFO_SVC_SETTINGS_ID_MASK 0x0f
|
#define PEF_SERIAL_TAP_ACCT_INFO_SVC_SETTINGS_ID_MASK 0x0f
|
||||||
uint8_t data2;
|
uint8_t data2;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct pef_serial_cfgparm_tap_svc_settings {
|
struct pef_serial_cfgparm_tap_svc_settings {
|
||||||
uint8_t data1;
|
uint8_t data1;
|
||||||
#define PEF_SERIAL_TAP_CONFIRMATION_ACK_AFTER_ETX 0x0
|
#define PEF_SERIAL_TAP_CONFIRMATION_ACK_AFTER_ETX 0x0
|
||||||
@ -658,16 +541,11 @@ struct pef_serial_cfgparm_tap_svc_settings {
|
|||||||
uint8_t escape_mask[4];
|
uint8_t escape_mask[4];
|
||||||
uint8_t timeout_parms[3];
|
uint8_t timeout_parms[3];
|
||||||
uint8_t retry_parms[2];
|
uint8_t retry_parms[2];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct bit_desc_map
|
|
||||||
pef_b2s_tap_svc_confirm __attribute__((unused)) = {
|
|
||||||
BIT_DESC_MAP_LIST,
|
|
||||||
{ {"ACK", PEF_SERIAL_TAP_CONFIRMATION_ACK_AFTER_ETX},
|
|
||||||
{"211+ACK", PEF_SERIAL_TAP_CONFIRMATION_211_ACK_AFTER_ETX},
|
|
||||||
{"{211|213}+ACK", PEF_SERIAL_TAP_CONFIRMATION_21X_ACK_AFTER_ETX},
|
|
||||||
{NULL}
|
|
||||||
} };
|
|
||||||
|
|
||||||
#if 0 /* FYI : config parm groupings */
|
#if 0 /* FYI : config parm groupings */
|
||||||
struct pef_config_parms { /* PEF */
|
struct pef_config_parms { /* PEF */
|
||||||
@ -685,7 +563,7 @@ BIT_DESC_MAP_LIST,
|
|||||||
struct pef_cfgparm_alert_string_table_size;
|
struct pef_cfgparm_alert_string_table_size;
|
||||||
struct pef_cfgparm_alert_string_keys;
|
struct pef_cfgparm_alert_string_keys;
|
||||||
struct pef_cfgparm_alert_string_table_entry;
|
struct pef_cfgparm_alert_string_table_entry;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
struct pef_lan_config_parms { /* LAN */
|
struct pef_lan_config_parms { /* LAN */
|
||||||
struct pef_lan_cfgparm_set_in_progress;
|
struct pef_lan_cfgparm_set_in_progress;
|
||||||
@ -708,7 +586,7 @@ BIT_DESC_MAP_LIST,
|
|||||||
struct pef_lan_cfgparm_destination_count;
|
struct pef_lan_cfgparm_destination_count;
|
||||||
struct pef_lan_cfgparm_destination_type;
|
struct pef_lan_cfgparm_destination_type;
|
||||||
struct pef_lan_cfgparm_destination_ipaddr;
|
struct pef_lan_cfgparm_destination_ipaddr;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
struct pef_serial_config_parms { /* Serial/PPP */
|
struct pef_serial_config_parms { /* Serial/PPP */
|
||||||
struct pef_serial_cfgparm_set_in_progress;
|
struct pef_serial_cfgparm_set_in_progress;
|
||||||
@ -760,10 +638,11 @@ BIT_DESC_MAP_LIST,
|
|||||||
struct pef_serial_cfgparm_ppp_udp_proxy_xmit_bufsize;
|
struct pef_serial_cfgparm_ppp_udp_proxy_xmit_bufsize;
|
||||||
struct pef_serial_cfgparm_ppp_udp_proxy_recv_bufsize;
|
struct pef_serial_cfgparm_ppp_udp_proxy_recv_bufsize;
|
||||||
struct pef_serial_cfgparm_ppp_remote_console_ipaddr;
|
struct pef_serial_cfgparm_ppp_remote_console_ipaddr;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IPMI_CMD_GET_PEF_CAPABILITIES 0x10
|
#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_PEF_CONFIG_PARMS 0x13
|
||||||
#define IPMI_CMD_GET_LAST_PROCESSED_EVT_ID 0x15
|
#define IPMI_CMD_GET_LAST_PROCESSED_EVT_ID 0x15
|
||||||
#define IPMI_CMD_GET_SYSTEM_GUID 0x37
|
#define IPMI_CMD_GET_SYSTEM_GUID 0x37
|
||||||
@ -771,6 +650,13 @@ BIT_DESC_MAP_LIST,
|
|||||||
#define IPMI_CMD_LAN_GET_CONFIG 0x02
|
#define IPMI_CMD_LAN_GET_CONFIG 0x02
|
||||||
#define IPMI_CMD_SERIAL_GET_CONFIG 0x11
|
#define IPMI_CMD_SERIAL_GET_CONFIG 0x11
|
||||||
|
|
||||||
|
struct pef_cfgparm_set_policy_table_entry
|
||||||
|
{
|
||||||
|
uint8_t param_selector;
|
||||||
|
uint8_t policy_id;
|
||||||
|
struct pef_policy_entry entry;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
const char * ipmi_pef_bit_desc(struct bit_desc_map * map, uint32_t val);
|
const char * ipmi_pef_bit_desc(struct bit_desc_map * map, uint32_t val);
|
||||||
void ipmi_pef_print_flags(struct bit_desc_map * map, flg_e type, uint32_t val);
|
void ipmi_pef_print_flags(struct bit_desc_map * map, flg_e type, uint32_t val);
|
||||||
void ipmi_pef_print_dec(const char * text, uint32_t val);
|
void ipmi_pef_print_dec(const char * text, uint32_t val);
|
||||||
@ -780,5 +666,3 @@ void ipmi_pef_print_2xd(const char * text, uint8_t u1, uint8_t u2);
|
|||||||
void ipmi_pef_print_str(const char * text, const char * val);
|
void ipmi_pef_print_str(const char * text, const char * val);
|
||||||
|
|
||||||
int ipmi_pef_main(struct ipmi_intf * intf, int argc, char ** argv);
|
int ipmi_pef_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
|
|
||||||
#endif /* IPMI_PEF_H */
|
|
121
include/ipmitool/ipmi_picmg.h
Normal file
121
include/ipmitool/ipmi_picmg.h
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
(C) Kontron
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
/* PICMG version */
|
||||||
|
#define PICMG_CPCI_MAJOR_VERSION 1
|
||||||
|
#define PICMG_ATCA_MAJOR_VERSION 2
|
||||||
|
#define PICMG_AMC_MAJOR_VERSION 4
|
||||||
|
#define PICMG_UTCA_MAJOR_VERSION 5
|
||||||
|
|
||||||
|
/* PICMG commands */
|
||||||
|
#define PICMG_GET_PICMG_PROPERTIES_CMD 0x00
|
||||||
|
#define PICMG_GET_ADDRESS_INFO_CMD 0x01
|
||||||
|
#define PICMG_GET_SHELF_ADDRESS_INFO_CMD 0x02
|
||||||
|
#define PICMG_SET_SHELF_ADDRESS_INFO_CMD 0x03
|
||||||
|
#define PICMG_FRU_CONTROL_CMD 0x04
|
||||||
|
#define PICMG_GET_FRU_LED_PROPERTIES_CMD 0x05
|
||||||
|
#define PICMG_GET_LED_COLOR_CAPABILITIES_CMD 0x06
|
||||||
|
#define PICMG_SET_FRU_LED_STATE_CMD 0x07
|
||||||
|
#define PICMG_GET_FRU_LED_STATE_CMD 0x08
|
||||||
|
#define PICMG_SET_IPMB_CMD 0x09
|
||||||
|
#define PICMG_SET_FRU_POLICY_CMD 0x0A
|
||||||
|
#define PICMG_GET_FRU_POLICY_CMD 0x0B
|
||||||
|
#define PICMG_FRU_ACTIVATION_CMD 0x0C
|
||||||
|
#define PICMG_GET_DEVICE_LOCATOR_RECORD_CMD 0x0D
|
||||||
|
#define PICMG_SET_PORT_STATE_CMD 0x0E
|
||||||
|
#define PICMG_GET_PORT_STATE_CMD 0x0F
|
||||||
|
#define PICMG_COMPUTE_POWER_PROPERTIES_CMD 0x10
|
||||||
|
#define PICMG_SET_POWER_LEVEL_CMD 0x11
|
||||||
|
#define PICMG_GET_POWER_LEVEL_CMD 0x12
|
||||||
|
#define PICMG_RENEGOTIATE_POWER_CMD 0x13
|
||||||
|
#define PICMG_GET_FAN_SPEED_PROPERTIES_CMD 0x14
|
||||||
|
#define PICMG_SET_FAN_LEVEL_CMD 0x15
|
||||||
|
#define PICMG_GET_FAN_LEVEL_CMD 0x16
|
||||||
|
#define PICMG_BUSED_RESOURCE_CMD 0x17
|
||||||
|
|
||||||
|
/* AMC.0 commands */
|
||||||
|
#define PICMG_AMC_SET_PORT_STATE_CMD 0x19
|
||||||
|
#define PICMG_AMC_GET_PORT_STATE_CMD 0x1A
|
||||||
|
/* AMC.0 R2.0 commands */
|
||||||
|
#define PICMG_AMC_SET_CLK_STATE_CMD 0x2C
|
||||||
|
#define PICMG_AMC_GET_CLK_STATE_CMD 0x2D
|
||||||
|
|
||||||
|
/* Site Types */
|
||||||
|
#define PICMG_ATCA_BOARD 0x00
|
||||||
|
#define PICMG_POWER_ENTRY 0x01
|
||||||
|
#define PICMG_SHELF_FRU 0x02
|
||||||
|
#define PICMG_DEDICATED_SHMC 0x03
|
||||||
|
#define PICMG_FAN_TRAY 0x04
|
||||||
|
#define PICMG_FAN_FILTER_TRAY 0x05
|
||||||
|
#define PICMG_ALARM 0x06
|
||||||
|
#define PICMG_AMC 0x07
|
||||||
|
#define PICMG_PMC 0x08
|
||||||
|
#define PICMG_RTM 0x09
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct picmg_set_fru_activation_cmd {
|
||||||
|
unsigned char picmg_id; /* always 0*/
|
||||||
|
unsigned char fru_id; /* threshold setting mask */
|
||||||
|
unsigned char fru_state; /* fru activation/deactivation */
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum picmg_busres_board_cmd_types {
|
||||||
|
PICMG_BUSRES_BOARD_CMD_QUERY =0,
|
||||||
|
PICMG_BUSRES_BOARD_CMD_RELEASE,
|
||||||
|
PICMG_BUSRES_BOARD_CMD_FORCE,
|
||||||
|
PICMG_BUSRES_BOARD_CMD_BUS_FREE
|
||||||
|
} t_picmg_busres_board_cmd_types ;
|
||||||
|
|
||||||
|
typedef enum picmg_busres_shmc_cmd_types {
|
||||||
|
PICMG_BUSRES_SHMC_CMD_REQUEST =0,
|
||||||
|
PICMG_BUSRES_SHMC_CMD_RELINQUISH,
|
||||||
|
PICMG_BUSRES_SHMC_CMD_NOTIFY
|
||||||
|
} t_picmg_busres_shmc_cmd_types ;
|
||||||
|
|
||||||
|
typedef enum picmg_busres_resource_id {
|
||||||
|
PICMG_BUSRES_METAL_TEST_BUS_1=0,
|
||||||
|
PICMG_BUSRES_METAL_TEST_BUS_2,
|
||||||
|
PICMG_BUSRES_SYNC_CLOCK_GROUP_1,
|
||||||
|
PICMG_BUSRES_SYNC_CLOCK_GROUP_2,
|
||||||
|
PICMG_BUSRES_SYNC_CLOCK_GROUP_3
|
||||||
|
} t_picmg_busres_resource_id;
|
||||||
|
|
||||||
|
const char *picmg_led_color_str(int color);
|
||||||
|
|
||||||
|
struct sAmcPortState {
|
||||||
|
#ifndef WORDS_BIGENDIAN
|
||||||
|
unsigned short lane0 : 1;
|
||||||
|
unsigned short lane1 : 1;
|
||||||
|
unsigned short lane2 : 1;
|
||||||
|
unsigned short lane3 : 1;
|
||||||
|
unsigned short type : 8;
|
||||||
|
unsigned short type_ext : 4;
|
||||||
|
unsigned char group_id : 8;
|
||||||
|
#else
|
||||||
|
unsigned char group_id : 8;
|
||||||
|
unsigned short type_ext : 4;
|
||||||
|
unsigned short type : 8;
|
||||||
|
unsigned short lane3 : 1;
|
||||||
|
unsigned short lane2 : 1;
|
||||||
|
unsigned short lane1 : 1;
|
||||||
|
unsigned short lane0 : 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
unsigned char state;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
|
uint8_t picmg_discover(struct ipmi_intf *intf);
|
||||||
|
uint8_t ipmi_picmg_ipmb_address(struct ipmi_intf *intf);
|
52
include/ipmitool/ipmi_quantaoem.h
Normal file
52
include/ipmitool/ipmi_quantaoem.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 Quanta Computer Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Quanta Computer Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* Quanta Computer Inc. AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* Quanta Computer Inc. OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_sdr.h>
|
||||||
|
|
||||||
|
#define OEM_QCT_NETFN 0x36
|
||||||
|
#define OEM_QCT_GET_INFO 0x65
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
OEM_QCT_PLATFORM_UNKNOWN = 0,
|
||||||
|
OEM_QCT_PLATFORM_GRANTLEY,
|
||||||
|
OEM_QCT_PLATFORM_PURLEY
|
||||||
|
} qct_platform_t;
|
||||||
|
|
||||||
|
qct_platform_t oem_qct_get_platform_id(struct ipmi_intf *intf);
|
||||||
|
char *oem_qct_get_evt_desc(struct ipmi_intf *intf, struct sel_event_record *rec);
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_RAW_H
|
#pragma once
|
||||||
#define IPMI_RAW_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -40,5 +39,3 @@ struct ipmi_rs * ipmi_master_write_read(struct ipmi_intf * intf, uint8_t bus, ui
|
|||||||
uint8_t * wdata, uint8_t wsize, uint8_t rsize);
|
uint8_t * wdata, uint8_t wsize, uint8_t rsize);
|
||||||
int ipmi_rawi2c_main(struct ipmi_intf * intf, int argc, char ** argv);
|
int ipmi_rawi2c_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
int ipmi_rawspd_main(struct ipmi_intf * intf, int argc, char ** argv);
|
int ipmi_rawspd_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||||
|
|
||||||
#endif /* IPMI_RAW_H */
|
|
@ -30,13 +30,13 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_SDR_H
|
#pragma once
|
||||||
#define IPMI_SDR_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <ipmitool/bswap.h>
|
#include <ipmitool/bswap.h>
|
||||||
@ -102,9 +102,10 @@ enum {
|
|||||||
#define GET_SENSOR_EVENT_STATUS 0x2b
|
#define GET_SENSOR_EVENT_STATUS 0x2b
|
||||||
#define GET_SENSOR_READING 0x2d
|
#define GET_SENSOR_READING 0x2d
|
||||||
#define GET_SENSOR_TYPE 0x2f
|
#define GET_SENSOR_TYPE 0x2f
|
||||||
#define GET_SENSOR_READING 0x2d
|
|
||||||
#define GET_SENSOR_TYPE 0x2f
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_repo_info_rs {
|
struct sdr_repo_info_rs {
|
||||||
uint8_t version; /* SDR version (51h) */
|
uint8_t version; /* SDR version (51h) */
|
||||||
uint16_t count; /* number of records */
|
uint16_t count; /* number of records */
|
||||||
@ -112,20 +113,39 @@ struct sdr_repo_info_rs {
|
|||||||
uint32_t add_stamp; /* last add timestamp */
|
uint32_t add_stamp; /* last add timestamp */
|
||||||
uint32_t erase_stamp; /* last del timestamp */
|
uint32_t erase_stamp; /* last del timestamp */
|
||||||
uint8_t op_support; /* supported operations */
|
uint8_t op_support; /* supported operations */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
/* builtin (device) sdrs support */
|
/* builtin (device) sdrs support */
|
||||||
struct sdr_device_info_rs {
|
struct sdr_device_info_rs {
|
||||||
unsigned char count; /* number of records */
|
unsigned char count; /* number of records */
|
||||||
unsigned char flags; /* flags */
|
unsigned char flags; /* flags */
|
||||||
unsigned char popChangeInd[3]; /* free space in SDR */
|
unsigned char popChangeInd[3]; /* free space in SDR */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
#define GET_SDR_RESERVE_REPO 0x22
|
#define GET_SDR_RESERVE_REPO 0x22
|
||||||
struct sdr_reserve_repo_rs {
|
struct sdr_reserve_repo_rs {
|
||||||
uint16_t reserve_id; /* reservation ID */
|
uint16_t reserve_id; /* reservation ID */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
#define GET_SDR 0x23
|
#define GET_SDR 0x23
|
||||||
struct sdr_get_rq {
|
struct sdr_get_rq {
|
||||||
uint16_t reserve_id; /* reservation ID */
|
uint16_t reserve_id; /* reservation ID */
|
||||||
@ -133,8 +153,14 @@ struct sdr_get_rq {
|
|||||||
uint8_t offset; /* offset into SDR */
|
uint8_t offset; /* offset into SDR */
|
||||||
#define GET_SDR_ENTIRE_RECORD 0xff
|
#define GET_SDR_ENTIRE_RECORD 0xff
|
||||||
uint8_t length; /* length to read */
|
uint8_t length; /* length to read */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_get_rs {
|
struct sdr_get_rs {
|
||||||
uint16_t next; /* next record id */
|
uint16_t next; /* next record id */
|
||||||
uint16_t id; /* record ID */
|
uint16_t id; /* record ID */
|
||||||
@ -152,15 +178,21 @@ struct sdr_get_rs {
|
|||||||
#define SDR_RECORD_TYPE_OEM 0xc0
|
#define SDR_RECORD_TYPE_OEM 0xc0
|
||||||
uint8_t type; /* record type */
|
uint8_t type; /* record type */
|
||||||
uint8_t length; /* remaining record bytes */
|
uint8_t length; /* remaining record bytes */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_mask {
|
struct sdr_record_mask {
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
uint16_t assert_event; /* assertion event mask */
|
uint16_t assert_event; /* assertion event mask */
|
||||||
uint16_t deassert_event; /* de-assertion event mask */
|
uint16_t deassert_event; /* de-assertion event mask */
|
||||||
uint16_t read; /* discrete reading mask */
|
uint16_t read; /* discrete reading mask */
|
||||||
} discrete;
|
} ATTRIBUTE_PACKING discrete;
|
||||||
struct {
|
struct {
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
uint16_t reserved:1;
|
uint16_t reserved:1;
|
||||||
@ -254,7 +286,7 @@ struct sdr_record_mask {
|
|||||||
uint16_t unr:1;
|
uint16_t unr:1;
|
||||||
uint16_t reserved:2;
|
uint16_t reserved:2;
|
||||||
#endif
|
#endif
|
||||||
} set;
|
} ATTRIBUTE_PACKING set;
|
||||||
struct {
|
struct {
|
||||||
#if WORDS_BIGENDIAN /* readable threshold mask */
|
#if WORDS_BIGENDIAN /* readable threshold mask */
|
||||||
/* padding upper 8 bits */
|
/* padding upper 8 bits */
|
||||||
@ -276,13 +308,19 @@ struct sdr_record_mask {
|
|||||||
uint16_t reserved:2;
|
uint16_t reserved:2;
|
||||||
uint16_t settable:8;
|
uint16_t settable:8;
|
||||||
#endif
|
#endif
|
||||||
} read;
|
} ATTRIBUTE_PACKING read;
|
||||||
};
|
} ATTRIBUTE_PACKING;
|
||||||
} threshold;
|
} ATTRIBUTE_PACKING threshold;
|
||||||
} type;
|
} ATTRIBUTE_PACKING type;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct sdr_record_compact_sensor {
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct sdr_record_common_sensor {
|
||||||
struct {
|
struct {
|
||||||
uint8_t owner_id;
|
uint8_t owner_id;
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
@ -295,7 +333,7 @@ struct sdr_record_compact_sensor {
|
|||||||
uint8_t channel:4; /* channel number */
|
uint8_t channel:4; /* channel number */
|
||||||
#endif
|
#endif
|
||||||
uint8_t sensor_num; /* unique sensor number */
|
uint8_t sensor_num; /* unique sensor number */
|
||||||
} keys;
|
} ATTRIBUTE_PACKING keys;
|
||||||
|
|
||||||
struct entity_id entity;
|
struct entity_id entity;
|
||||||
|
|
||||||
@ -320,7 +358,7 @@ struct sdr_record_compact_sensor {
|
|||||||
uint8_t scanning:1;
|
uint8_t scanning:1;
|
||||||
uint8_t __reserved:1;
|
uint8_t __reserved:1;
|
||||||
#endif
|
#endif
|
||||||
} init;
|
} ATTRIBUTE_PACKING init;
|
||||||
struct {
|
struct {
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
uint8_t ignore:1;
|
uint8_t ignore:1;
|
||||||
@ -335,14 +373,37 @@ struct sdr_record_compact_sensor {
|
|||||||
uint8_t rearm:1;
|
uint8_t rearm:1;
|
||||||
uint8_t ignore:1;
|
uint8_t ignore:1;
|
||||||
#endif
|
#endif
|
||||||
} capabilities;
|
} ATTRIBUTE_PACKING capabilities;
|
||||||
uint8_t type; /* sensor type */
|
uint8_t type;
|
||||||
} sensor;
|
} ATTRIBUTE_PACKING sensor;
|
||||||
|
|
||||||
uint8_t event_type; /* event/reading type code */
|
uint8_t event_type; /* event/reading type code */
|
||||||
|
|
||||||
struct sdr_record_mask mask;
|
struct sdr_record_mask mask;
|
||||||
|
|
||||||
|
/* IPMI 2.0, Table 43-1, byte 21[7:6] Analog (numeric) Data Format */
|
||||||
|
#define SDR_UNIT_FMT_UNSIGNED 0 /* unsigned */
|
||||||
|
#define SDR_UNIT_FMT_1S_COMPL 1 /* 1's complement (signed) */
|
||||||
|
#define SDR_UNIT_FMT_2S_COMPL 2 /* 2's complement (signed) */
|
||||||
|
#define SDR_UNIT_FMT_NA 3 /* does not return analog (numeric) reading */
|
||||||
|
/* IPMI 2.0, Table 43-1, byte 21[5:3] Rate */
|
||||||
|
#define SDR_UNIT_RATE_NONE 0 /* none */
|
||||||
|
#define SDR_UNIT_RATE_MICROSEC 1 /* per us */
|
||||||
|
#define SDR_UNIT_RATE_MILLISEC 2 /* per ms */
|
||||||
|
#define SDR_UNIT_RATE_SEC 3 /* per s */
|
||||||
|
#define SDR_UNIT_RATE_MIN 4 /* per min */
|
||||||
|
#define SDR_UNIT_RATE_HR 5 /* per hour */
|
||||||
|
#define SDR_UNIT_RATE_DAY 6 /* per day */
|
||||||
|
#define SDR_UNIT_RATE_RSVD 7 /* reserved */
|
||||||
|
/* IPMI 2.0, Table 43-1, byte 21[2:1] Modifier Unit */
|
||||||
|
#define SDR_UNIT_MOD_NONE 0 /* none */
|
||||||
|
#define SDR_UNIT_MOD_DIV 1 /* Basic Unit / Modifier Unit */
|
||||||
|
#define SDR_UNIT_MOD_MUL 2 /* Basic Unit * Mofifier Unit */
|
||||||
|
#define SDR_UNIT_MOD_RSVD 3 /* Reserved */
|
||||||
|
/* IPMI 2.0, Table 43-1, byte 21[0] Percentage */
|
||||||
|
#define SDR_UNIT_PCT_NO 0
|
||||||
|
#define SDR_UNIT_PCT_YES 1
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
uint8_t analog:2;
|
uint8_t analog:2;
|
||||||
@ -356,11 +417,25 @@ struct sdr_record_compact_sensor {
|
|||||||
uint8_t analog:2;
|
uint8_t analog:2;
|
||||||
#endif
|
#endif
|
||||||
struct {
|
struct {
|
||||||
uint8_t base;
|
uint8_t base; /* Base unit type code per IPMI 2.0 Table 43-15 */
|
||||||
uint8_t modifier;
|
uint8_t modifier; /* Modifier unit type code per Table 43-15 */
|
||||||
} type;
|
} ATTRIBUTE_PACKING type;
|
||||||
} unit;
|
} ATTRIBUTE_PACKING unit;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
|
||||||
|
/* SDR Record Common Sensor header macros */
|
||||||
|
#define IS_THRESHOLD_SENSOR(s) ((s)->event_type == 1)
|
||||||
|
#define UNITS_ARE_DISCRETE(s) ((s)->unit.analog == 3)
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct sdr_record_compact_sensor {
|
||||||
|
struct sdr_record_common_sensor cmn;
|
||||||
struct {
|
struct {
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
uint8_t __reserved:2;
|
uint8_t __reserved:2;
|
||||||
@ -378,21 +453,27 @@ struct sdr_record_compact_sensor {
|
|||||||
uint8_t mod_offset:7;
|
uint8_t mod_offset:7;
|
||||||
uint8_t entity_inst:1;
|
uint8_t entity_inst:1;
|
||||||
#endif
|
#endif
|
||||||
} share;
|
} ATTRIBUTE_PACKING share;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct {
|
struct {
|
||||||
uint8_t positive;
|
uint8_t positive;
|
||||||
uint8_t negative;
|
uint8_t negative;
|
||||||
} hysteresis;
|
} ATTRIBUTE_PACKING hysteresis;
|
||||||
} threshold;
|
} ATTRIBUTE_PACKING threshold;
|
||||||
|
|
||||||
uint8_t __reserved[3];
|
uint8_t __reserved[3];
|
||||||
uint8_t oem; /* reserved for OEM use */
|
uint8_t oem; /* reserved for OEM use */
|
||||||
uint8_t id_code; /* sensor ID string type/length code */
|
uint8_t id_code; /* sensor ID string type/length code */
|
||||||
uint8_t id_string[16]; /* sensor ID string bytes, only if id_code != 0 */
|
uint8_t id_string[16]; /* sensor ID string bytes, only if id_code != 0 */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_eventonly_sensor {
|
struct sdr_record_eventonly_sensor {
|
||||||
struct {
|
struct {
|
||||||
uint8_t owner_id;
|
uint8_t owner_id;
|
||||||
@ -406,7 +487,7 @@ struct sdr_record_eventonly_sensor {
|
|||||||
uint8_t channel:4; /* channel number */
|
uint8_t channel:4; /* channel number */
|
||||||
#endif
|
#endif
|
||||||
uint8_t sensor_num; /* unique sensor number */
|
uint8_t sensor_num; /* unique sensor number */
|
||||||
} keys;
|
} ATTRIBUTE_PACKING keys;
|
||||||
|
|
||||||
struct entity_id entity;
|
struct entity_id entity;
|
||||||
|
|
||||||
@ -430,93 +511,23 @@ struct sdr_record_eventonly_sensor {
|
|||||||
uint8_t mod_offset:7;
|
uint8_t mod_offset:7;
|
||||||
uint8_t entity_inst:1;
|
uint8_t entity_inst:1;
|
||||||
#endif
|
#endif
|
||||||
} share;
|
} ATTRIBUTE_PACKING share;
|
||||||
|
|
||||||
uint8_t __reserved;
|
uint8_t __reserved;
|
||||||
uint8_t oem; /* reserved for OEM use */
|
uint8_t oem; /* reserved for OEM use */
|
||||||
uint8_t id_code; /* sensor ID string type/length code */
|
uint8_t id_code; /* sensor ID string type/length code */
|
||||||
uint8_t id_string[16]; /* sensor ID string bytes, only if id_code != 0 */
|
uint8_t id_string[16]; /* sensor ID string bytes, only if id_code != 0 */
|
||||||
|
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_full_sensor {
|
struct sdr_record_full_sensor {
|
||||||
struct {
|
struct sdr_record_common_sensor cmn;
|
||||||
uint8_t owner_id;
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t channel:4; /* channel number */
|
|
||||||
uint8_t __reserved:2;
|
|
||||||
uint8_t lun:2; /* sensor owner lun */
|
|
||||||
#else
|
|
||||||
uint8_t lun:2; /* sensor owner lun */
|
|
||||||
uint8_t __reserved:2;
|
|
||||||
uint8_t channel:4; /* channel number */
|
|
||||||
#endif
|
|
||||||
uint8_t sensor_num; /* unique sensor number */
|
|
||||||
} keys;
|
|
||||||
|
|
||||||
struct entity_id entity;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
struct {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved:1;
|
|
||||||
uint8_t scanning:1;
|
|
||||||
uint8_t events:1;
|
|
||||||
uint8_t thresholds:1;
|
|
||||||
uint8_t hysteresis:1;
|
|
||||||
uint8_t type:1;
|
|
||||||
uint8_t event_gen:1;
|
|
||||||
uint8_t sensor_scan:1;
|
|
||||||
#else
|
|
||||||
uint8_t sensor_scan:1;
|
|
||||||
uint8_t event_gen:1;
|
|
||||||
uint8_t type:1;
|
|
||||||
uint8_t hysteresis:1;
|
|
||||||
uint8_t thresholds:1;
|
|
||||||
uint8_t events:1;
|
|
||||||
uint8_t scanning:1;
|
|
||||||
uint8_t __reserved:1;
|
|
||||||
#endif
|
|
||||||
} init;
|
|
||||||
struct {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t ignore:1;
|
|
||||||
uint8_t rearm:1;
|
|
||||||
uint8_t hysteresis:2;
|
|
||||||
uint8_t threshold:2;
|
|
||||||
uint8_t event_msg:2;
|
|
||||||
#else
|
|
||||||
uint8_t event_msg:2;
|
|
||||||
uint8_t threshold:2;
|
|
||||||
uint8_t hysteresis:2;
|
|
||||||
uint8_t rearm:1;
|
|
||||||
uint8_t ignore:1;
|
|
||||||
#endif
|
|
||||||
} capabilities;
|
|
||||||
uint8_t type;
|
|
||||||
} sensor;
|
|
||||||
|
|
||||||
uint8_t event_type; /* event/reading type code */
|
|
||||||
|
|
||||||
struct sdr_record_mask mask;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t analog:2;
|
|
||||||
uint8_t rate:3;
|
|
||||||
uint8_t modifier:2;
|
|
||||||
uint8_t pct:1;
|
|
||||||
#else
|
|
||||||
uint8_t pct:1;
|
|
||||||
uint8_t modifier:2;
|
|
||||||
uint8_t rate:3;
|
|
||||||
uint8_t analog:2;
|
|
||||||
#endif
|
|
||||||
struct {
|
|
||||||
uint8_t base;
|
|
||||||
uint8_t modifier;
|
|
||||||
} type;
|
|
||||||
} unit;
|
|
||||||
|
|
||||||
#define SDR_SENSOR_L_LINEAR 0x00
|
#define SDR_SENSOR_L_LINEAR 0x00
|
||||||
#define SDR_SENSOR_L_LN 0x01
|
#define SDR_SENSOR_L_LN 0x01
|
||||||
@ -548,7 +559,7 @@ struct sdr_record_full_sensor {
|
|||||||
uint8_t normal_min:1; /* normal min field specified */
|
uint8_t normal_min:1; /* normal min field specified */
|
||||||
uint8_t __reserved:5;
|
uint8_t __reserved:5;
|
||||||
#endif
|
#endif
|
||||||
} analog_flag;
|
} ATTRIBUTE_PACKING analog_flag;
|
||||||
|
|
||||||
uint8_t nominal_read; /* nominal reading, raw value */
|
uint8_t nominal_read; /* nominal reading, raw value */
|
||||||
uint8_t normal_max; /* normal maximum, raw value */
|
uint8_t normal_max; /* normal maximum, raw value */
|
||||||
@ -561,23 +572,29 @@ struct sdr_record_full_sensor {
|
|||||||
uint8_t non_recover;
|
uint8_t non_recover;
|
||||||
uint8_t critical;
|
uint8_t critical;
|
||||||
uint8_t non_critical;
|
uint8_t non_critical;
|
||||||
} upper;
|
} ATTRIBUTE_PACKING upper;
|
||||||
struct {
|
struct {
|
||||||
uint8_t non_recover;
|
uint8_t non_recover;
|
||||||
uint8_t critical;
|
uint8_t critical;
|
||||||
uint8_t non_critical;
|
uint8_t non_critical;
|
||||||
} lower;
|
} ATTRIBUTE_PACKING lower;
|
||||||
struct {
|
struct {
|
||||||
uint8_t positive;
|
uint8_t positive;
|
||||||
uint8_t negative;
|
uint8_t negative;
|
||||||
} hysteresis;
|
} ATTRIBUTE_PACKING hysteresis;
|
||||||
} threshold;
|
} ATTRIBUTE_PACKING threshold;
|
||||||
uint8_t __reserved[2];
|
uint8_t __reserved[2];
|
||||||
uint8_t oem; /* reserved for OEM use */
|
uint8_t oem; /* reserved for OEM use */
|
||||||
uint8_t id_code; /* sensor ID string type/length code */
|
uint8_t id_code; /* sensor ID string type/length code */
|
||||||
uint8_t id_string[16]; /* sensor ID string bytes, only if id_code != 0 */
|
uint8_t id_string[16]; /* sensor ID string bytes, only if id_code != 0 */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_mc_locator {
|
struct sdr_record_mc_locator {
|
||||||
uint8_t dev_slave_addr;
|
uint8_t dev_slave_addr;
|
||||||
#if WORDS_BIGENDIAN
|
#if WORDS_BIGENDIAN
|
||||||
@ -602,7 +619,10 @@ struct sdr_record_mc_locator {
|
|||||||
uint8_t oem;
|
uint8_t oem;
|
||||||
uint8_t id_code;
|
uint8_t id_code;
|
||||||
uint8_t id_string[16];
|
uint8_t id_string[16];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct sdr_record_fru_locator {
|
struct sdr_record_fru_locator {
|
||||||
uint8_t dev_slave_addr;
|
uint8_t dev_slave_addr;
|
||||||
@ -632,8 +652,14 @@ struct sdr_record_fru_locator {
|
|||||||
uint8_t oem;
|
uint8_t oem;
|
||||||
uint8_t id_code;
|
uint8_t id_code;
|
||||||
uint8_t id_string[16];
|
uint8_t id_string[16];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_generic_locator {
|
struct sdr_record_generic_locator {
|
||||||
uint8_t dev_access_addr;
|
uint8_t dev_access_addr;
|
||||||
uint8_t dev_slave_addr;
|
uint8_t dev_slave_addr;
|
||||||
@ -660,8 +686,14 @@ struct sdr_record_generic_locator {
|
|||||||
uint8_t oem;
|
uint8_t oem;
|
||||||
uint8_t id_code;
|
uint8_t id_code;
|
||||||
uint8_t id_string[16];
|
uint8_t id_string[16];
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_entity_assoc {
|
struct sdr_record_entity_assoc {
|
||||||
struct entity_id entity; /* container entity ID and instance */
|
struct entity_id entity; /* container entity ID and instance */
|
||||||
struct {
|
struct {
|
||||||
@ -685,7 +717,10 @@ struct sdr_record_entity_assoc {
|
|||||||
uint8_t entity_inst_3; /* entity inst 3 | range 2 first instance */
|
uint8_t entity_inst_3; /* entity inst 3 | range 2 first instance */
|
||||||
uint8_t entity_id_4; /* entity ID 4 | range 2 entity */
|
uint8_t entity_id_4; /* entity ID 4 | range 2 entity */
|
||||||
uint8_t entity_inst_4; /* entity inst 4 | range 2 last instance */
|
uint8_t entity_inst_4; /* entity inst 4 | range 2 last instance */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct sdr_record_oem {
|
struct sdr_record_oem {
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
@ -696,6 +731,9 @@ struct sdr_record_oem {
|
|||||||
* The Get SDR Repository Info response structure
|
* The Get SDR Repository Info response structure
|
||||||
* From table 33-3 of the IPMI v2.0 spec
|
* From table 33-3 of the IPMI v2.0 spec
|
||||||
*/
|
*/
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct get_sdr_repository_info_rsp {
|
struct get_sdr_repository_info_rsp {
|
||||||
uint8_t sdr_version;
|
uint8_t sdr_version;
|
||||||
uint8_t record_count_lsb;
|
uint8_t record_count_lsb;
|
||||||
@ -720,14 +758,21 @@ struct get_sdr_repository_info_rsp {
|
|||||||
uint8_t modal_update_support:2;
|
uint8_t modal_update_support:2;
|
||||||
uint8_t overflow_flag:1;
|
uint8_t overflow_flag:1;
|
||||||
#endif
|
#endif
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct ipmi_sdr_iterator {
|
struct ipmi_sdr_iterator {
|
||||||
uint16_t reservation;
|
uint16_t reservation;
|
||||||
int total;
|
int total;
|
||||||
int next;
|
int next;
|
||||||
|
int use_built_in;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sdr_record_list {
|
struct sdr_record_list {
|
||||||
uint16_t id;
|
uint16_t id;
|
||||||
uint8_t version;
|
uint8_t version;
|
||||||
@ -736,6 +781,7 @@ struct sdr_record_list {
|
|||||||
uint8_t *raw;
|
uint8_t *raw;
|
||||||
struct sdr_record_list *next;
|
struct sdr_record_list *next;
|
||||||
union {
|
union {
|
||||||
|
struct sdr_record_common_sensor *common;
|
||||||
struct sdr_record_full_sensor *full;
|
struct sdr_record_full_sensor *full;
|
||||||
struct sdr_record_compact_sensor *compact;
|
struct sdr_record_compact_sensor *compact;
|
||||||
struct sdr_record_eventonly_sensor *eventonly;
|
struct sdr_record_eventonly_sensor *eventonly;
|
||||||
@ -744,67 +790,81 @@ struct sdr_record_list {
|
|||||||
struct sdr_record_mc_locator *mcloc;
|
struct sdr_record_mc_locator *mcloc;
|
||||||
struct sdr_record_entity_assoc *entassoc;
|
struct sdr_record_entity_assoc *entassoc;
|
||||||
struct sdr_record_oem *oem;
|
struct sdr_record_oem *oem;
|
||||||
} record;
|
} ATTRIBUTE_PACKING record;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SENSOR_TYPE_MAX 0x2C
|
||||||
|
|
||||||
|
struct sensor_reading {
|
||||||
|
char s_id[17]; /* name of the sensor */
|
||||||
|
struct sdr_record_full_sensor *full;
|
||||||
|
struct sdr_record_compact_sensor *compact;
|
||||||
|
uint8_t s_reading_valid; /* read value valididity */
|
||||||
|
uint8_t s_scanning_disabled; /* read of value disabled */
|
||||||
|
uint8_t s_reading_unavailable; /* read value unavailable */
|
||||||
|
uint8_t s_reading; /* value which was read */
|
||||||
|
uint8_t s_data2; /* data2 value read */
|
||||||
|
uint8_t s_data3; /* data3 value read */
|
||||||
|
uint8_t s_has_analog_value; /* sensor has analog value */
|
||||||
|
double s_a_val; /* read value converted to analog */
|
||||||
|
char s_a_str[16]; /* analog value as a string */
|
||||||
|
const char *s_a_units; /* analog value units string */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* unit description codes (IPMI v1.5 section 37.16) */
|
/*
|
||||||
#define UNIT_MAX 0x90
|
* Determine if bridging is necessary to address a sensor at the given
|
||||||
static const char *unit_desc[] __attribute__ ((unused)) = {
|
* address (_addr) and (_chan) via the interface (_intf).
|
||||||
"unspecified",
|
*
|
||||||
"degrees C", "degrees F", "degrees K",
|
* If the sensor is being addressed on channel zero, it resides on
|
||||||
"Volts", "Amps", "Watts", "Joules",
|
* IPMB-0. If the interface target IPMB-0 address is exactly the same as
|
||||||
"Coulombs", "VA", "Nits",
|
* the sensor address then the sensor resides on the target IPMB-0
|
||||||
"lumen", "lux", "Candela",
|
* so we don't need extra levels of bridging to address the sensor.
|
||||||
"kPa", "PSI", "Newton",
|
* Or
|
||||||
"CFM", "RPM", "Hz",
|
* If the sensor target address and channel match the interface target address
|
||||||
"microsecond", "millisecond", "second", "minute", "hour",
|
* and channel then there is no extra levels of bridging required.
|
||||||
"day", "week", "mil", "inches", "feet", "cu in", "cu feet",
|
*
|
||||||
"mm", "cm", "m", "cu cm", "cu m", "liters", "fluid ounce",
|
* Note:
|
||||||
"radians", "steradians", "revolutions", "cycles",
|
* The target IPMB-0 address is the address of the SDR repository that was
|
||||||
"gravities", "ounce", "pound", "ft-lb", "oz-in", "gauss",
|
* accessed using the user specified bridging command line arguments.
|
||||||
"gilberts", "henry", "millihenry", "farad", "microfarad",
|
* Access to any sensor on the target IPMB-0 can be addressed using the
|
||||||
"ohms", "siemens", "mole", "becquerel", "PPM", "reserved",
|
* target address and transit address in the interface.
|
||||||
"Decibels", "DbA", "DbC", "gray", "sievert",
|
*/
|
||||||
"color temp deg K", "bit", "kilobit", "megabit", "gigabit",
|
#define BRIDGE_TO_SENSOR(_intf, _addr, _chan) \
|
||||||
"byte", "kilobyte", "megabyte", "gigabyte", "word", "dword",
|
( !((_chan == 0 && _intf->target_ipmb_addr && \
|
||||||
"qword", "line", "hit", "miss", "retry", "reset",
|
_intf->target_ipmb_addr == _addr) || \
|
||||||
"overflow", "underrun", "collision", "packets", "messages",
|
(_addr == _intf->target_addr && _chan == _intf->target_channel)) )
|
||||||
"characters", "error", "correctable error", "uncorrectable error",};
|
|
||||||
|
|
||||||
/* sensor type codes (IPMI v1.5 table 36.3)
|
|
||||||
/ Updated to v2.0 Table 42-3, Sensor Type Codes */
|
|
||||||
#define SENSOR_TYPE_MAX 0x2C
|
|
||||||
static const char *sensor_type_desc[] __attribute__ ((unused)) = {
|
|
||||||
"reserved",
|
|
||||||
"Temperature", "Voltage", "Current", "Fan",
|
|
||||||
"Physical Security", "Platform Security", "Processor",
|
|
||||||
"Power Supply", "Power Unit", "Cooling Device", "Other",
|
|
||||||
"Memory", "Drive Slot / Bay", "POST Memory Resize",
|
|
||||||
"System Firmwares", "Event Logging Disabled", "Watchdog",
|
|
||||||
"System Event", "Critical Interrupt", "Button",
|
|
||||||
"Module / Board", "Microcontroller", "Add-in Card",
|
|
||||||
"Chassis", "Chip Set", "Other FRU", "Cable / Interconnect",
|
|
||||||
"Terminator", "System Boot Initiated", "Boot Error",
|
|
||||||
"OS Boot", "OS Critical Stop", "Slot / Connector",
|
|
||||||
"System ACPI Power State", "Watchdog", "Platform Alert",
|
|
||||||
"Entity Presence", "Monitor ASIC", "LAN",
|
|
||||||
"Management Subsystem Health", "Battery","Session Audit",
|
|
||||||
"Version Change","FRU State" };
|
|
||||||
|
|
||||||
struct ipmi_sdr_iterator *ipmi_sdr_start(struct ipmi_intf *intf);
|
struct ipmi_sdr_iterator *ipmi_sdr_start(struct ipmi_intf *intf,
|
||||||
|
int use_builtin);
|
||||||
struct sdr_get_rs *ipmi_sdr_get_next_header(struct ipmi_intf *intf,
|
struct sdr_get_rs *ipmi_sdr_get_next_header(struct ipmi_intf *intf,
|
||||||
struct ipmi_sdr_iterator *i);
|
struct ipmi_sdr_iterator *i);
|
||||||
uint8_t *ipmi_sdr_get_record(struct ipmi_intf *intf, struct sdr_get_rs *header,
|
uint8_t *ipmi_sdr_get_record(struct ipmi_intf *intf, struct sdr_get_rs *header,
|
||||||
struct ipmi_sdr_iterator *i);
|
struct ipmi_sdr_iterator *i);
|
||||||
void ipmi_sdr_end(struct ipmi_intf *intf, struct ipmi_sdr_iterator *i);
|
void ipmi_sdr_end(struct ipmi_sdr_iterator *i);
|
||||||
int ipmi_sdr_print_sdr(struct ipmi_intf *intf, uint8_t type);
|
int ipmi_sdr_print_sdr(struct ipmi_intf *intf, uint8_t type);
|
||||||
|
|
||||||
|
int ipmi_sdr_print_name_from_rawentry(uint16_t id, uint8_t type,uint8_t * raw);
|
||||||
int ipmi_sdr_print_rawentry(struct ipmi_intf *intf, uint8_t type, uint8_t * raw,
|
int ipmi_sdr_print_rawentry(struct ipmi_intf *intf, uint8_t type, uint8_t * raw,
|
||||||
int len);
|
int len);
|
||||||
int ipmi_sdr_print_listentry(struct ipmi_intf *intf,
|
int ipmi_sdr_print_listentry(struct ipmi_intf *intf,
|
||||||
struct sdr_record_list *entry);
|
struct sdr_record_list *entry);
|
||||||
char *ipmi_sdr_get_unit_string(uint8_t type, uint8_t base, uint8_t modifier);
|
void ipmi_sdr_print_sensor_hysteresis(struct sdr_record_common_sensor *sensor,
|
||||||
const char *ipmi_sdr_get_status(struct sdr_record_full_sensor *sensor,
|
struct sdr_record_full_sensor *full,
|
||||||
uint8_t stat);
|
uint8_t hysteresis_value,
|
||||||
|
const char *hdrstr);
|
||||||
|
const char *ipmi_sdr_get_unit_string(bool pct, uint8_t type,
|
||||||
|
uint8_t base, uint8_t modifier);
|
||||||
|
struct sensor_reading *
|
||||||
|
ipmi_sdr_read_sensor_value(struct ipmi_intf *intf,
|
||||||
|
struct sdr_record_common_sensor *sensor,
|
||||||
|
uint8_t sdr_record_type, int precision);
|
||||||
|
const char *ipmi_sdr_get_thresh_status(struct sensor_reading *sr,
|
||||||
|
const char *invalidstr);
|
||||||
|
const char *ipmi_sdr_get_status(int, const char *, uint8_t stat);
|
||||||
double sdr_convert_sensor_tolerance(struct sdr_record_full_sensor *sensor,
|
double sdr_convert_sensor_tolerance(struct sdr_record_full_sensor *sensor,
|
||||||
uint8_t val);
|
uint8_t val);
|
||||||
double sdr_convert_sensor_reading(struct sdr_record_full_sensor *sensor,
|
double sdr_convert_sensor_reading(struct sdr_record_full_sensor *sensor,
|
||||||
@ -818,34 +878,27 @@ struct ipmi_rs *ipmi_sdr_get_sensor_reading(struct ipmi_intf *intf,
|
|||||||
struct ipmi_rs *ipmi_sdr_get_sensor_reading_ipmb(struct ipmi_intf *intf,
|
struct ipmi_rs *ipmi_sdr_get_sensor_reading_ipmb(struct ipmi_intf *intf,
|
||||||
uint8_t sensor,
|
uint8_t sensor,
|
||||||
uint8_t target,
|
uint8_t target,
|
||||||
uint8_t lun);
|
uint8_t lun,
|
||||||
|
uint8_t channel);
|
||||||
struct ipmi_rs *ipmi_sdr_get_sensor_thresholds(struct ipmi_intf *intf,
|
struct ipmi_rs *ipmi_sdr_get_sensor_thresholds(struct ipmi_intf *intf,
|
||||||
uint8_t sensor);
|
uint8_t sensor,
|
||||||
|
uint8_t target, uint8_t lun, uint8_t channel);
|
||||||
struct ipmi_rs *ipmi_sdr_get_sensor_hysteresis(struct ipmi_intf *intf,
|
struct ipmi_rs *ipmi_sdr_get_sensor_hysteresis(struct ipmi_intf *intf,
|
||||||
uint8_t sensor);
|
uint8_t sensor,
|
||||||
const char *ipmi_sdr_get_sensor_type_desc(const uint8_t type);
|
uint8_t target, uint8_t lun, uint8_t channel);
|
||||||
int ipmi_sdr_get_reservation(struct ipmi_intf *intf, uint16_t * reserve_id);
|
int ipmi_sdr_get_reservation(struct ipmi_intf *intf, int use_builtin,
|
||||||
|
uint16_t * reserve_id);
|
||||||
|
|
||||||
int ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|
||||||
struct sdr_record_full_sensor *sensor);
|
|
||||||
int ipmi_sdr_print_sensor_compact(struct ipmi_intf *intf,
|
|
||||||
struct sdr_record_compact_sensor *sensor);
|
|
||||||
int ipmi_sdr_print_sensor_eventonly(struct ipmi_intf *intf,
|
int ipmi_sdr_print_sensor_eventonly(struct ipmi_intf *intf,
|
||||||
struct sdr_record_eventonly_sensor *sensor);
|
struct sdr_record_eventonly_sensor *sensor);
|
||||||
int ipmi_sdr_print_sensor_generic_locator(struct ipmi_intf *intf,
|
int ipmi_sdr_print_sensor_generic_locator(struct sdr_record_generic_locator *fru);
|
||||||
struct sdr_record_generic_locator
|
int ipmi_sdr_print_sensor_fru_locator(struct sdr_record_fru_locator *fru);
|
||||||
*fru);
|
int ipmi_sdr_print_sensor_mc_locator(struct sdr_record_mc_locator *mc);
|
||||||
int ipmi_sdr_print_sensor_fru_locator(struct ipmi_intf *intf,
|
|
||||||
struct sdr_record_fru_locator *fru);
|
|
||||||
int ipmi_sdr_print_sensor_mc_locator(struct ipmi_intf *intf,
|
|
||||||
struct sdr_record_mc_locator *mc);
|
|
||||||
int ipmi_sdr_print_sensor_entity_assoc(struct ipmi_intf *intf,
|
|
||||||
struct sdr_record_entity_assoc *assoc);
|
|
||||||
|
|
||||||
struct sdr_record_list *ipmi_sdr_find_sdr_byentity(struct ipmi_intf *intf,
|
struct sdr_record_list *ipmi_sdr_find_sdr_byentity(struct ipmi_intf *intf,
|
||||||
struct entity_id *entity);
|
struct entity_id *entity);
|
||||||
struct sdr_record_list *ipmi_sdr_find_sdr_bynumtype(struct ipmi_intf *intf,
|
struct sdr_record_list *ipmi_sdr_find_sdr_bynumtype(struct ipmi_intf *intf,
|
||||||
uint8_t num, uint8_t type);
|
uint16_t gen_id, uint8_t num, uint8_t type);
|
||||||
struct sdr_record_list *ipmi_sdr_find_sdr_bysensortype(struct ipmi_intf *intf,
|
struct sdr_record_list *ipmi_sdr_find_sdr_bysensortype(struct ipmi_intf *intf,
|
||||||
uint8_t type);
|
uint8_t type);
|
||||||
struct sdr_record_list *ipmi_sdr_find_sdr_byid(struct ipmi_intf *intf,
|
struct sdr_record_list *ipmi_sdr_find_sdr_byid(struct ipmi_intf *intf,
|
||||||
@ -853,20 +906,22 @@ struct sdr_record_list *ipmi_sdr_find_sdr_byid(struct ipmi_intf *intf,
|
|||||||
struct sdr_record_list *ipmi_sdr_find_sdr_bytype(struct ipmi_intf *intf,
|
struct sdr_record_list *ipmi_sdr_find_sdr_bytype(struct ipmi_intf *intf,
|
||||||
uint8_t type);
|
uint8_t type);
|
||||||
int ipmi_sdr_list_cache(struct ipmi_intf *intf);
|
int ipmi_sdr_list_cache(struct ipmi_intf *intf);
|
||||||
int ipmi_sdr_list_cache_fromfile(struct ipmi_intf *intf, const char *ifile);
|
int ipmi_sdr_list_cache_fromfile(const char *ifile);
|
||||||
void ipmi_sdr_list_empty(struct ipmi_intf *intf);
|
void ipmi_sdr_list_empty(void);
|
||||||
int ipmi_sdr_print_info(struct ipmi_intf *intf);
|
int ipmi_sdr_print_info(struct ipmi_intf *intf);
|
||||||
void ipmi_sdr_print_discrete_state(const char *desc, uint8_t sensor_type,
|
void ipmi_sdr_print_discrete_state(struct ipmi_intf *intf,
|
||||||
uint8_t event_type, uint8_t state1,
|
const char *desc, uint8_t sensor_type,
|
||||||
uint8_t state2);
|
uint8_t event_type, uint8_t state1,
|
||||||
void ipmi_sdr_print_discrete_state_mini(const char *separator,
|
uint8_t state2);
|
||||||
|
void ipmi_sdr_print_discrete_state_mini(struct ipmi_intf *intf,
|
||||||
|
const char *header, const char *separator,
|
||||||
uint8_t sensor_type, uint8_t event_type,
|
uint8_t sensor_type, uint8_t event_type,
|
||||||
uint8_t state1, uint8_t state2);
|
uint8_t state1, uint8_t state2);
|
||||||
int ipmi_sdr_print_sensor_event_status(struct ipmi_intf *intf,
|
int ipmi_sdr_print_sensor_event_status(struct ipmi_intf *intf,
|
||||||
uint8_t sensor_num, uint8_t sensor_type,
|
uint8_t sensor_num, uint8_t sensor_type,
|
||||||
uint8_t event_type, int numeric_fmt);
|
uint8_t event_type, int numeric_fmt,
|
||||||
|
uint8_t target, uint8_t lun, uint8_t channel);
|
||||||
int ipmi_sdr_print_sensor_event_enable(struct ipmi_intf *intf,
|
int ipmi_sdr_print_sensor_event_enable(struct ipmi_intf *intf,
|
||||||
uint8_t sensor_num, uint8_t sensor_type,
|
uint8_t sensor_num, uint8_t sensor_type,
|
||||||
uint8_t event_type, int numeric_fmt);
|
uint8_t event_type, int numeric_fmt,
|
||||||
|
uint8_t target, uint8_t lun, uint8_t channel);
|
||||||
#endif /* IPMI_SDR_H */
|
|
@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@ -30,31 +28,16 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_EVENT_H
|
#pragma once
|
||||||
#define IPMI_EVENT_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
/*
|
||||||
# include <config.h>
|
* Methods to add SDRs to repository from built-in sensors or files
|
||||||
#endif
|
*/
|
||||||
#include <ipmitool/ipmi.h>
|
int
|
||||||
|
ipmi_sdr_add_from_sensors(struct ipmi_intf *intf, int maxslot);
|
||||||
|
|
||||||
#define EVENT_DIR_ASSERT 0
|
int
|
||||||
#define EVENT_DIR_DEASSERT 1
|
ipmi_sdr_add_from_file(struct ipmi_intf *intf, const char *ifile);
|
||||||
|
|
||||||
struct platform_event_msg {
|
int
|
||||||
uint8_t evm_rev;
|
ipmi_sdr_add_from_list(struct ipmi_intf *intf, const char *rangeList);
|
||||||
uint8_t sensor_type;
|
|
||||||
uint8_t sensor_num;
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t event_dir : 1;
|
|
||||||
uint8_t event_type : 7;
|
|
||||||
#else
|
|
||||||
uint8_t event_type : 7;
|
|
||||||
uint8_t event_dir : 1;
|
|
||||||
#endif
|
|
||||||
uint8_t event_data[3];
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
int ipmi_event_main(struct ipmi_intf *, int, char **);
|
|
||||||
|
|
||||||
#endif /*IPMI_EVENT_H*/
|
|
688
include/ipmitool/ipmi_sel.h
Normal file
688
include/ipmitool/ipmi_sel.h
Normal file
@ -0,0 +1,688 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_sdr.h>
|
||||||
|
|
||||||
|
#define IPMI_CMD_GET_SEL_INFO 0x40
|
||||||
|
#define IPMI_CMD_GET_SEL_ALLOC_INFO 0x41
|
||||||
|
#define IPMI_CMD_RESERVE_SEL 0x42
|
||||||
|
#define IPMI_CMD_GET_SEL_ENTRY 0x43
|
||||||
|
#define IPMI_CMD_ADD_SEL_ENTRY 0x44
|
||||||
|
#define IPMI_CMD_PARTIAL_ADD_SEL_ENTRY 0x45
|
||||||
|
#define IPMI_CMD_DELETE_SEL_ENTRY 0x46
|
||||||
|
#define IPMI_CMD_CLEAR_SEL 0x47
|
||||||
|
#define IPMI_CMD_GET_SEL_TIME 0x48
|
||||||
|
#define IPMI_CMD_SET_SEL_TIME 0x49
|
||||||
|
#define IPMI_CMD_GET_AUX_LOG_STATUS 0x5A
|
||||||
|
#define IPMI_CMD_SET_AUX_LOG_STATUS 0x5B
|
||||||
|
|
||||||
|
enum {
|
||||||
|
IPMI_EVENT_CLASS_DISCRETE,
|
||||||
|
IPMI_EVENT_CLASS_DIGITAL,
|
||||||
|
IPMI_EVENT_CLASS_THRESHOLD,
|
||||||
|
IPMI_EVENT_CLASS_OEM,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct sel_get_rq {
|
||||||
|
uint16_t reserve_id;
|
||||||
|
uint16_t record_id;
|
||||||
|
uint8_t offset;
|
||||||
|
uint8_t length;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct standard_spec_sel_rec{
|
||||||
|
uint32_t timestamp;
|
||||||
|
uint16_t gen_id;
|
||||||
|
uint8_t evm_rev;
|
||||||
|
uint8_t sensor_type;
|
||||||
|
uint8_t sensor_num;
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
uint8_t event_dir : 1;
|
||||||
|
uint8_t event_type : 7;
|
||||||
|
#else
|
||||||
|
uint8_t event_type : 7;
|
||||||
|
uint8_t event_dir : 1;
|
||||||
|
#endif
|
||||||
|
#define DATA_BYTE2_SPECIFIED_MASK 0xc0 /* event_data[0] bit mask */
|
||||||
|
#define DATA_BYTE3_SPECIFIED_MASK 0x30 /* event_data[0] bit mask */
|
||||||
|
#define EVENT_OFFSET_MASK 0x0f /* event_data[0] bit mask */
|
||||||
|
uint8_t event_data[3];
|
||||||
|
};
|
||||||
|
/* Dell Specific MACRO's */
|
||||||
|
#define OEM_CODE_IN_BYTE2 0x80 /* Dell specific OEM Byte in Byte 2 Mask */
|
||||||
|
#define OEM_CODE_IN_BYTE3 0x20 /* Dell specific OEM Byte in Byte 3 Mask */
|
||||||
|
/* MASK MACROS */
|
||||||
|
#define MASK_LOWER_NIBBLE 0x0F
|
||||||
|
#define MASK_HIGHER_NIBBLE 0xF0
|
||||||
|
/*Senosr type Macro's */
|
||||||
|
#define SENSOR_TYPE_MEMORY 0x0C
|
||||||
|
#define SENSOR_TYPE_CRIT_INTR 0x13
|
||||||
|
#define SENSOR_TYPE_EVT_LOG 0x10
|
||||||
|
#define SENSOR_TYPE_SYS_EVENT 0x12
|
||||||
|
#define SENSOR_TYPE_PROCESSOR 0x07
|
||||||
|
#define SENSOR_TYPE_OEM_SEC_EVENT 0xC1
|
||||||
|
#define SENSOR_TYPE_VER_CHANGE 0x2B
|
||||||
|
#define SENSOR_TYPE_FRM_PROG 0x0F
|
||||||
|
#define SENSOR_TYPE_WTDOG 0x23
|
||||||
|
#define SENSOR_TYPE_OEM_NFATAL_ERROR 0xC2
|
||||||
|
#define SENSOR_TYPE_OEM_FATAL_ERROR 0xC3
|
||||||
|
#define SENSOR_TYPE_TXT_CMD_ERROR 0x20
|
||||||
|
#define SENSOR_TYPE_SUPERMICRO_OEM 0xD0
|
||||||
|
/* End of Macro for DELL Specific */
|
||||||
|
#define SEL_OEM_TS_DATA_LEN 6
|
||||||
|
#define SEL_OEM_NOTS_DATA_LEN 13
|
||||||
|
struct oem_ts_spec_sel_rec{
|
||||||
|
uint32_t timestamp;
|
||||||
|
uint8_t manf_id[3];
|
||||||
|
uint8_t oem_defined[SEL_OEM_TS_DATA_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct oem_nots_spec_sel_rec{
|
||||||
|
uint8_t oem_defined[SEL_OEM_NOTS_DATA_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
struct sel_event_record {
|
||||||
|
uint16_t record_id;
|
||||||
|
uint8_t record_type;
|
||||||
|
union{
|
||||||
|
struct standard_spec_sel_rec standard_type;
|
||||||
|
struct oem_ts_spec_sel_rec oem_ts_type;
|
||||||
|
struct oem_nots_spec_sel_rec oem_nots_type;
|
||||||
|
} sel_type;
|
||||||
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct ipmi_event_sensor_types {
|
||||||
|
uint8_t code;
|
||||||
|
uint8_t offset;
|
||||||
|
#define ALL_OFFSETS_SPECIFIED 0xff
|
||||||
|
uint8_t data;
|
||||||
|
const char * desc;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ipmi_event_sensor_types generic_event_types[] = {
|
||||||
|
/* Threshold Based States */
|
||||||
|
{ 0x01, 0x00, 0xff, "Lower Non-critical going low " },
|
||||||
|
{ 0x01, 0x01, 0xff, "Lower Non-critical going high" },
|
||||||
|
{ 0x01, 0x02, 0xff, "Lower Critical going low " },
|
||||||
|
{ 0x01, 0x03, 0xff, "Lower Critical going high" },
|
||||||
|
{ 0x01, 0x04, 0xff, "Lower Non-recoverable going low " },
|
||||||
|
{ 0x01, 0x05, 0xff, "Lower Non-recoverable going high" },
|
||||||
|
{ 0x01, 0x06, 0xff, "Upper Non-critical going low " },
|
||||||
|
{ 0x01, 0x07, 0xff, "Upper Non-critical going high" },
|
||||||
|
{ 0x01, 0x08, 0xff, "Upper Critical going low " },
|
||||||
|
{ 0x01, 0x09, 0xff, "Upper Critical going high" },
|
||||||
|
{ 0x01, 0x0a, 0xff, "Upper Non-recoverable going low " },
|
||||||
|
{ 0x01, 0x0b, 0xff, "Upper Non-recoverable going high" },
|
||||||
|
/* DMI-based "usage state" States */
|
||||||
|
{ 0x02, 0x00, 0xff, "Transition to Idle" },
|
||||||
|
{ 0x02, 0x01, 0xff, "Transition to Active" },
|
||||||
|
{ 0x02, 0x02, 0xff, "Transition to Busy" },
|
||||||
|
/* Digital-Discrete Event States */
|
||||||
|
{ 0x03, 0x00, 0xff, "State Deasserted" },
|
||||||
|
{ 0x03, 0x01, 0xff, "State Asserted" },
|
||||||
|
{ 0x04, 0x00, 0xff, "Predictive Failure Deasserted" },
|
||||||
|
{ 0x04, 0x01, 0xff, "Predictive Failure Asserted" },
|
||||||
|
{ 0x05, 0x00, 0xff, "Limit Not Exceeded" },
|
||||||
|
{ 0x05, 0x01, 0xff, "Limit Exceeded" },
|
||||||
|
{ 0x06, 0x00, 0xff, "Performance Met" },
|
||||||
|
{ 0x06, 0x01, 0xff, "Performance Lags" },
|
||||||
|
/* Severity Event States */
|
||||||
|
{ 0x07, 0x00, 0xff, "Transition to OK" },
|
||||||
|
{ 0x07, 0x01, 0xff, "Transition to Non-critical from OK" },
|
||||||
|
{ 0x07, 0x02, 0xff, "Transition to Critical from less severe" },
|
||||||
|
{ 0x07, 0x03, 0xff, "Transition to Non-recoverable from less severe" },
|
||||||
|
{ 0x07, 0x04, 0xff, "Transition to Non-critical from more severe" },
|
||||||
|
{ 0x07, 0x05, 0xff, "Transition to Critical from Non-recoverable" },
|
||||||
|
{ 0x07, 0x06, 0xff, "Transition to Non-recoverable" },
|
||||||
|
{ 0x07, 0x07, 0xff, "Monitor" },
|
||||||
|
{ 0x07, 0x08, 0xff, "Informational" },
|
||||||
|
/* Availability Status States */
|
||||||
|
{ 0x08, 0x00, 0xff, "Device Absent" },
|
||||||
|
{ 0x08, 0x01, 0xff, "Device Present" },
|
||||||
|
{ 0x09, 0x00, 0xff, "Device Disabled" },
|
||||||
|
{ 0x09, 0x01, 0xff, "Device Enabled" },
|
||||||
|
{ 0x0a, 0x00, 0xff, "Transition to Running" },
|
||||||
|
{ 0x0a, 0x01, 0xff, "Transition to In Test" },
|
||||||
|
{ 0x0a, 0x02, 0xff, "Transition to Power Off" },
|
||||||
|
{ 0x0a, 0x03, 0xff, "Transition to On Line" },
|
||||||
|
{ 0x0a, 0x04, 0xff, "Transition to Off Line" },
|
||||||
|
{ 0x0a, 0x05, 0xff, "Transition to Off Duty" },
|
||||||
|
{ 0x0a, 0x06, 0xff, "Transition to Degraded" },
|
||||||
|
{ 0x0a, 0x07, 0xff, "Transition to Power Save" },
|
||||||
|
{ 0x0a, 0x08, 0xff, "Install Error" },
|
||||||
|
/* Redundancy States */
|
||||||
|
{ 0x0b, 0x00, 0xff, "Fully Redundant" },
|
||||||
|
{ 0x0b, 0x01, 0xff, "Redundancy Lost" },
|
||||||
|
{ 0x0b, 0x02, 0xff, "Redundancy Degraded" },
|
||||||
|
{ 0x0b, 0x03, 0xff, "Non-Redundant: Sufficient from Redundant" },
|
||||||
|
{ 0x0b, 0x04, 0xff, "Non-Redundant: Sufficient from Insufficient" },
|
||||||
|
{ 0x0b, 0x05, 0xff, "Non-Redundant: Insufficient Resources" },
|
||||||
|
{ 0x0b, 0x06, 0xff, "Redundancy Degraded from Fully Redundant" },
|
||||||
|
{ 0x0b, 0x07, 0xff, "Redundancy Degraded from Non-Redundant" },
|
||||||
|
/* ACPI Device Power States */
|
||||||
|
{ 0x0c, 0x00, 0xff, "D0 Power State" },
|
||||||
|
{ 0x0c, 0x01, 0xff, "D1 Power State" },
|
||||||
|
{ 0x0c, 0x02, 0xff, "D2 Power State" },
|
||||||
|
{ 0x0c, 0x03, 0xff, "D3 Power State" },
|
||||||
|
/* END */
|
||||||
|
{ 0x00, 0x00, 0xff, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ipmi_event_sensor_types sensor_specific_event_types[] = {
|
||||||
|
/* Physical Security */
|
||||||
|
{ 0x05, 0x00, 0xff, "General Chassis intrusion" },
|
||||||
|
{ 0x05, 0x01, 0xff, "Drive Bay intrusion" },
|
||||||
|
{ 0x05, 0x02, 0xff, "I/O Card area intrusion" },
|
||||||
|
{ 0x05, 0x03, 0xff, "Processor area intrusion" },
|
||||||
|
{ 0x05, 0x04, 0xff, "System unplugged from LAN" },
|
||||||
|
{ 0x05, 0x05, 0xff, "Unauthorized dock" },
|
||||||
|
{ 0x05, 0x06, 0xff, "FAN area intrusion" },
|
||||||
|
/* Platform Security */
|
||||||
|
{ 0x06, 0x00, 0xff, "Front Panel Lockout violation attempted" },
|
||||||
|
{ 0x06, 0x01, 0xff, "Pre-boot password violation - user password" },
|
||||||
|
{ 0x06, 0x02, 0xff, "Pre-boot password violation - setup password" },
|
||||||
|
{ 0x06, 0x03, 0xff, "Pre-boot password violation - network boot password" },
|
||||||
|
{ 0x06, 0x04, 0xff, "Other pre-boot password violation" },
|
||||||
|
{ 0x06, 0x05, 0xff, "Out-of-band access password violation" },
|
||||||
|
/* Processor */
|
||||||
|
{ 0x07, 0x00, 0xff, "IERR" },
|
||||||
|
{ 0x07, 0x01, 0xff, "Thermal Trip" },
|
||||||
|
{ 0x07, 0x02, 0xff, "FRB1/BIST failure" },
|
||||||
|
{ 0x07, 0x03, 0xff, "FRB2/Hang in POST failure" },
|
||||||
|
{ 0x07, 0x04, 0xff, "FRB3/Processor startup/init failure" },
|
||||||
|
{ 0x07, 0x05, 0xff, "Configuration Error" },
|
||||||
|
{ 0x07, 0x06, 0xff, "SM BIOS Uncorrectable CPU-complex Error" },
|
||||||
|
{ 0x07, 0x07, 0xff, "Presence detected" },
|
||||||
|
{ 0x07, 0x08, 0xff, "Disabled" },
|
||||||
|
{ 0x07, 0x09, 0xff, "Terminator presence detected" },
|
||||||
|
{ 0x07, 0x0a, 0xff, "Throttled" },
|
||||||
|
{ 0x07, 0x0b, 0xff, "Uncorrectable machine check exception" },
|
||||||
|
{ 0x07, 0x0c, 0xff, "Correctable machine check error" },
|
||||||
|
/* Power Supply */
|
||||||
|
{ 0x08, 0x00, 0xff, "Presence detected" },
|
||||||
|
{ 0x08, 0x01, 0xff, "Failure detected" },
|
||||||
|
{ 0x08, 0x02, 0xff, "Predictive failure" },
|
||||||
|
{ 0x08, 0x03, 0xff, "Power Supply AC lost" },
|
||||||
|
{ 0x08, 0x04, 0xff, "AC lost or out-of-range" },
|
||||||
|
{ 0x08, 0x05, 0xff, "AC out-of-range, but present" },
|
||||||
|
{ 0x08, 0x06, 0x00, "Config Error: Vendor Mismatch" },
|
||||||
|
{ 0x08, 0x06, 0x01, "Config Error: Revision Mismatch" },
|
||||||
|
{ 0x08, 0x06, 0x02, "Config Error: Processor Missing" },
|
||||||
|
{ 0x08, 0x06, 0x03, "Config Error: Power Supply Rating Mismatch" },
|
||||||
|
{ 0x08, 0x06, 0x04, "Config Error: Voltage Rating Mismatch" },
|
||||||
|
{ 0x08, 0x06, 0xff, "Config Error" },
|
||||||
|
{ 0x08, 0x07, 0xff, "Power Supply Inactive" },
|
||||||
|
/* Power Unit */
|
||||||
|
{ 0x09, 0x00, 0xff, "Power off/down" },
|
||||||
|
{ 0x09, 0x01, 0xff, "Power cycle" },
|
||||||
|
{ 0x09, 0x02, 0xff, "240VA power down" },
|
||||||
|
{ 0x09, 0x03, 0xff, "Interlock power down" },
|
||||||
|
{ 0x09, 0x04, 0xff, "AC lost" },
|
||||||
|
{ 0x09, 0x05, 0xff, "Soft-power control failure" },
|
||||||
|
{ 0x09, 0x06, 0xff, "Failure detected" },
|
||||||
|
{ 0x09, 0x07, 0xff, "Predictive failure" },
|
||||||
|
/* Memory */
|
||||||
|
{ 0x0c, 0x00, 0xff, "Correctable ECC" },
|
||||||
|
{ 0x0c, 0x01, 0xff, "Uncorrectable ECC" },
|
||||||
|
{ 0x0c, 0x02, 0xff, "Parity" },
|
||||||
|
{ 0x0c, 0x03, 0xff, "Memory Scrub Failed" },
|
||||||
|
{ 0x0c, 0x04, 0xff, "Memory Device Disabled" },
|
||||||
|
{ 0x0c, 0x05, 0xff, "Correctable ECC logging limit reached" },
|
||||||
|
{ 0x0c, 0x06, 0xff, "Presence Detected" },
|
||||||
|
{ 0x0c, 0x07, 0xff, "Configuration Error" },
|
||||||
|
{ 0x0c, 0x08, 0xff, "Spare" },
|
||||||
|
{ 0x0c, 0x09, 0xff, "Throttled" },
|
||||||
|
{ 0x0c, 0x0a, 0xff, "Critical Overtemperature" },
|
||||||
|
/* Drive Slot */
|
||||||
|
{ 0x0d, 0x00, 0xff, "Drive Present" },
|
||||||
|
{ 0x0d, 0x01, 0xff, "Drive Fault" },
|
||||||
|
{ 0x0d, 0x02, 0xff, "Predictive Failure" },
|
||||||
|
{ 0x0d, 0x03, 0xff, "Hot Spare" },
|
||||||
|
{ 0x0d, 0x04, 0xff, "Parity Check In Progress" },
|
||||||
|
{ 0x0d, 0x05, 0xff, "In Critical Array" },
|
||||||
|
{ 0x0d, 0x06, 0xff, "In Failed Array" },
|
||||||
|
{ 0x0d, 0x07, 0xff, "Rebuild In Progress" },
|
||||||
|
{ 0x0d, 0x08, 0xff, "Rebuild Aborted" },
|
||||||
|
/* System Firmware Error */
|
||||||
|
{ 0x0f, 0x00, 0x00, "Unspecified" },
|
||||||
|
{ 0x0f, 0x00, 0x01, "No system memory installed" },
|
||||||
|
{ 0x0f, 0x00, 0x02, "No usable system memory" },
|
||||||
|
{ 0x0f, 0x00, 0x03, "Unrecoverable IDE device failure" },
|
||||||
|
{ 0x0f, 0x00, 0x04, "Unrecoverable system-board failure" },
|
||||||
|
{ 0x0f, 0x00, 0x05, "Unrecoverable diskette failure" },
|
||||||
|
{ 0x0f, 0x00, 0x06, "Unrecoverable hard-disk controller failure" },
|
||||||
|
{ 0x0f, 0x00, 0x07, "Unrecoverable PS/2 or USB keyboard failure" },
|
||||||
|
{ 0x0f, 0x00, 0x08, "Removable boot media not found" },
|
||||||
|
{ 0x0f, 0x00, 0x09, "Unrecoverable video controller failure" },
|
||||||
|
{ 0x0f, 0x00, 0x0a, "No video device selected" },
|
||||||
|
{ 0x0f, 0x00, 0x0b, "BIOS corruption detected" },
|
||||||
|
{ 0x0f, 0x00, 0x0c, "CPU voltage mismatch" },
|
||||||
|
{ 0x0f, 0x00, 0x0d, "CPU speed mismatch failure" },
|
||||||
|
{ 0x0f, 0x00, 0xff, "Unknown Error" },
|
||||||
|
/* System Firmware Hang */
|
||||||
|
{ 0x0f, 0x01, 0x00, "Unspecified" },
|
||||||
|
{ 0x0f, 0x01, 0x01, "Memory initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x02, "Hard-disk initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x03, "Secondary CPU Initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x04, "User authentication" },
|
||||||
|
{ 0x0f, 0x01, 0x05, "User-initiated system setup" },
|
||||||
|
{ 0x0f, 0x01, 0x06, "USB resource configuration" },
|
||||||
|
{ 0x0f, 0x01, 0x07, "PCI resource configuration" },
|
||||||
|
{ 0x0f, 0x01, 0x08, "Option ROM initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x09, "Video initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x0a, "Cache initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x0b, "SMBus initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x0c, "Keyboard controller initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x0d, "Management controller initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x0e, "Docking station attachment" },
|
||||||
|
{ 0x0f, 0x01, 0x0f, "Enabling docking station" },
|
||||||
|
{ 0x0f, 0x01, 0x10, "Docking station ejection" },
|
||||||
|
{ 0x0f, 0x01, 0x11, "Disabling docking station" },
|
||||||
|
{ 0x0f, 0x01, 0x12, "Calling operating system wake-up vector" },
|
||||||
|
{ 0x0f, 0x01, 0x13, "System boot initiated" },
|
||||||
|
{ 0x0f, 0x01, 0x14, "Motherboard initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x15, "reserved" },
|
||||||
|
{ 0x0f, 0x01, 0x16, "Floppy initialization" },
|
||||||
|
{ 0x0f, 0x01, 0x17, "Keyboard test" },
|
||||||
|
{ 0x0f, 0x01, 0x18, "Pointing device test" },
|
||||||
|
{ 0x0f, 0x01, 0x19, "Primary CPU initialization" },
|
||||||
|
{ 0x0f, 0x01, 0xff, "Unknown Hang" },
|
||||||
|
/* System Firmware Progress */
|
||||||
|
{ 0x0f, 0x02, 0x00, "Unspecified" },
|
||||||
|
{ 0x0f, 0x02, 0x01, "Memory initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x02, "Hard-disk initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x03, "Secondary CPU Initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x04, "User authentication" },
|
||||||
|
{ 0x0f, 0x02, 0x05, "User-initiated system setup" },
|
||||||
|
{ 0x0f, 0x02, 0x06, "USB resource configuration" },
|
||||||
|
{ 0x0f, 0x02, 0x07, "PCI resource configuration" },
|
||||||
|
{ 0x0f, 0x02, 0x08, "Option ROM initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x09, "Video initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x0a, "Cache initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x0b, "SMBus initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x0c, "Keyboard controller initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x0d, "Management controller initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x0e, "Docking station attachment" },
|
||||||
|
{ 0x0f, 0x02, 0x0f, "Enabling docking station" },
|
||||||
|
{ 0x0f, 0x02, 0x10, "Docking station ejection" },
|
||||||
|
{ 0x0f, 0x02, 0x11, "Disabling docking station" },
|
||||||
|
{ 0x0f, 0x02, 0x12, "Calling operating system wake-up vector" },
|
||||||
|
{ 0x0f, 0x02, 0x13, "System boot initiated" },
|
||||||
|
{ 0x0f, 0x02, 0x14, "Motherboard initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x15, "reserved" },
|
||||||
|
{ 0x0f, 0x02, 0x16, "Floppy initialization" },
|
||||||
|
{ 0x0f, 0x02, 0x17, "Keyboard test" },
|
||||||
|
{ 0x0f, 0x02, 0x18, "Pointing device test" },
|
||||||
|
{ 0x0f, 0x02, 0x19, "Primary CPU initialization" },
|
||||||
|
{ 0x0f, 0x02, 0xff, "Unknown Progress" },
|
||||||
|
/* Event Logging Disabled */
|
||||||
|
{ 0x10, 0x00, 0xff, "Correctable memory error logging disabled" },
|
||||||
|
{ 0x10, 0x01, 0xff, "Event logging disabled" },
|
||||||
|
{ 0x10, 0x02, 0xff, "Log area reset/cleared" },
|
||||||
|
{ 0x10, 0x03, 0xff, "All event logging disabled" },
|
||||||
|
{ 0x10, 0x04, 0xff, "Log full" },
|
||||||
|
{ 0x10, 0x05, 0xff, "Log almost full" },
|
||||||
|
/* Watchdog 1 */
|
||||||
|
{ 0x11, 0x00, 0xff, "BIOS Reset" },
|
||||||
|
{ 0x11, 0x01, 0xff, "OS Reset" },
|
||||||
|
{ 0x11, 0x02, 0xff, "OS Shut Down" },
|
||||||
|
{ 0x11, 0x03, 0xff, "OS Power Down" },
|
||||||
|
{ 0x11, 0x04, 0xff, "OS Power Cycle" },
|
||||||
|
{ 0x11, 0x05, 0xff, "OS NMI/Diag Interrupt" },
|
||||||
|
{ 0x11, 0x06, 0xff, "OS Expired" },
|
||||||
|
{ 0x11, 0x07, 0xff, "OS pre-timeout Interrupt" },
|
||||||
|
/* System Event */
|
||||||
|
{ 0x12, 0x00, 0xff, "System Reconfigured" },
|
||||||
|
{ 0x12, 0x01, 0xff, "OEM System boot event" },
|
||||||
|
{ 0x12, 0x02, 0xff, "Undetermined system hardware failure" },
|
||||||
|
{ 0x12, 0x03, 0xff, "Entry added to auxiliary log" },
|
||||||
|
{ 0x12, 0x04, 0xff, "PEF Action" },
|
||||||
|
{ 0x12, 0x05, 0xff, "Timestamp Clock Sync" },
|
||||||
|
/* Critical Interrupt */
|
||||||
|
{ 0x13, 0x00, 0xff, "NMI/Diag Interrupt" },
|
||||||
|
{ 0x13, 0x01, 0xff, "Bus Timeout" },
|
||||||
|
{ 0x13, 0x02, 0xff, "I/O Channel check NMI" },
|
||||||
|
{ 0x13, 0x03, 0xff, "Software NMI" },
|
||||||
|
{ 0x13, 0x04, 0xff, "PCI PERR" },
|
||||||
|
{ 0x13, 0x05, 0xff, "PCI SERR" },
|
||||||
|
{ 0x13, 0x06, 0xff, "EISA failsafe timeout" },
|
||||||
|
{ 0x13, 0x07, 0xff, "Bus Correctable error" },
|
||||||
|
{ 0x13, 0x08, 0xff, "Bus Uncorrectable error" },
|
||||||
|
{ 0x13, 0x09, 0xff, "Fatal NMI" },
|
||||||
|
{ 0x13, 0x0a, 0xff, "Bus Fatal Error" },
|
||||||
|
{ 0x13, 0x0b, 0xff, "Bus Degraded" },
|
||||||
|
/* Button */
|
||||||
|
{ 0x14, 0x00, 0xff, "Power Button pressed" },
|
||||||
|
{ 0x14, 0x01, 0xff, "Sleep Button pressed" },
|
||||||
|
{ 0x14, 0x02, 0xff, "Reset Button pressed" },
|
||||||
|
{ 0x14, 0x03, 0xff, "FRU Latch" },
|
||||||
|
{ 0x14, 0x04, 0xff, "FRU Service" },
|
||||||
|
/* Chip Set */
|
||||||
|
{ 0x19, 0x00, 0xff, "Soft Power Control Failure" },
|
||||||
|
{ 0x19, 0x01, 0xff, "Thermal Trip" },
|
||||||
|
/* Cable/Interconnect */
|
||||||
|
{ 0x1b, 0x00, 0xff, "Connected" },
|
||||||
|
{ 0x1b, 0x01, 0xff, "Config Error" },
|
||||||
|
/* System Boot Initiated */
|
||||||
|
{ 0x1d, 0x00, 0xff, "Initiated by power up" },
|
||||||
|
{ 0x1d, 0x01, 0xff, "Initiated by hard reset" },
|
||||||
|
{ 0x1d, 0x02, 0xff, "Initiated by warm reset" },
|
||||||
|
{ 0x1d, 0x03, 0xff, "User requested PXE boot" },
|
||||||
|
{ 0x1d, 0x04, 0xff, "Automatic boot to diagnostic" },
|
||||||
|
{ 0x1d, 0x05, 0xff, "OS initiated hard reset" },
|
||||||
|
{ 0x1d, 0x06, 0xff, "OS initiated warm reset" },
|
||||||
|
{ 0x1d, 0x07, 0xff, "System Restart" },
|
||||||
|
/* Boot Error */
|
||||||
|
{ 0x1e, 0x00, 0xff, "No bootable media" },
|
||||||
|
{ 0x1e, 0x01, 0xff, "Non-bootable disk in drive" },
|
||||||
|
{ 0x1e, 0x02, 0xff, "PXE server not found" },
|
||||||
|
{ 0x1e, 0x03, 0xff, "Invalid boot sector" },
|
||||||
|
{ 0x1e, 0x04, 0xff, "Timeout waiting for selection" },
|
||||||
|
/* OS Boot */
|
||||||
|
{ 0x1f, 0x00, 0xff, "A: boot completed" },
|
||||||
|
{ 0x1f, 0x01, 0xff, "C: boot completed" },
|
||||||
|
{ 0x1f, 0x02, 0xff, "PXE boot completed" },
|
||||||
|
{ 0x1f, 0x03, 0xff, "Diagnostic boot completed" },
|
||||||
|
{ 0x1f, 0x04, 0xff, "CD-ROM boot completed" },
|
||||||
|
{ 0x1f, 0x05, 0xff, "ROM boot completed" },
|
||||||
|
{ 0x1f, 0x06, 0xff, "boot completed - device not specified" },
|
||||||
|
{ 0x1f, 0x07, 0xff, "Installation started" },
|
||||||
|
{ 0x1f, 0x08, 0xff, "Installation completed" },
|
||||||
|
{ 0x1f, 0x09, 0xff, "Installation aborted" },
|
||||||
|
{ 0x1f, 0x0a, 0xff, "Installation failed" },
|
||||||
|
/* OS Stop/Shutdown */
|
||||||
|
{ 0x20, 0x00, 0xff, "Error during system startup" },
|
||||||
|
{ 0x20, 0x01, 0xff, "Run-time critical stop" },
|
||||||
|
{ 0x20, 0x02, 0xff, "OS graceful stop" },
|
||||||
|
{ 0x20, 0x03, 0xff, "OS graceful shutdown" },
|
||||||
|
{ 0x20, 0x04, 0xff, "PEF initiated soft shutdown" },
|
||||||
|
{ 0x20, 0x05, 0xff, "Agent not responding" },
|
||||||
|
/* Slot/Connector */
|
||||||
|
{ 0x21, 0x00, 0xff, "Fault Status" },
|
||||||
|
{ 0x21, 0x01, 0xff, "Identify Status" },
|
||||||
|
{ 0x21, 0x02, 0xff, "Device Installed" },
|
||||||
|
{ 0x21, 0x03, 0xff, "Ready for Device Installation" },
|
||||||
|
{ 0x21, 0x04, 0xff, "Ready for Device Removal" },
|
||||||
|
{ 0x21, 0x05, 0xff, "Slot Power is Off" },
|
||||||
|
{ 0x21, 0x06, 0xff, "Device Removal Request" },
|
||||||
|
{ 0x21, 0x07, 0xff, "Interlock" },
|
||||||
|
{ 0x21, 0x08, 0xff, "Slot is Disabled" },
|
||||||
|
{ 0x21, 0x09, 0xff, "Spare Device" },
|
||||||
|
/* System ACPI Power State */
|
||||||
|
{ 0x22, 0x00, 0xff, "S0/G0: working" },
|
||||||
|
{ 0x22, 0x01, 0xff, "S1: sleeping with system hw & processor context maintained" },
|
||||||
|
{ 0x22, 0x02, 0xff, "S2: sleeping, processor context lost" },
|
||||||
|
{ 0x22, 0x03, 0xff, "S3: sleeping, processor & hw context lost, memory retained" },
|
||||||
|
{ 0x22, 0x04, 0xff, "S4: non-volatile sleep/suspend-to-disk" },
|
||||||
|
{ 0x22, 0x05, 0xff, "S5/G2: soft-off" },
|
||||||
|
{ 0x22, 0x06, 0xff, "S4/S5: soft-off" },
|
||||||
|
{ 0x22, 0x07, 0xff, "G3: mechanical off" },
|
||||||
|
{ 0x22, 0x08, 0xff, "Sleeping in S1/S2/S3 state" },
|
||||||
|
{ 0x22, 0x09, 0xff, "G1: sleeping" },
|
||||||
|
{ 0x22, 0x0a, 0xff, "S5: entered by override" },
|
||||||
|
{ 0x22, 0x0b, 0xff, "Legacy ON state" },
|
||||||
|
{ 0x22, 0x0c, 0xff, "Legacy OFF state" },
|
||||||
|
{ 0x22, 0x0e, 0xff, "Unknown" },
|
||||||
|
/* Watchdog 2 */
|
||||||
|
{ 0x23, 0x00, 0xff, "Timer expired" },
|
||||||
|
{ 0x23, 0x01, 0xff, "Hard reset" },
|
||||||
|
{ 0x23, 0x02, 0xff, "Power down" },
|
||||||
|
{ 0x23, 0x03, 0xff, "Power cycle" },
|
||||||
|
{ 0x23, 0x04, 0xff, "reserved" },
|
||||||
|
{ 0x23, 0x05, 0xff, "reserved" },
|
||||||
|
{ 0x23, 0x06, 0xff, "reserved" },
|
||||||
|
{ 0x23, 0x07, 0xff, "reserved" },
|
||||||
|
{ 0x23, 0x08, 0xff, "Timer interrupt" },
|
||||||
|
/* Platform Alert */
|
||||||
|
{ 0x24, 0x00, 0xff, "Platform generated page" },
|
||||||
|
{ 0x24, 0x01, 0xff, "Platform generated LAN alert" },
|
||||||
|
{ 0x24, 0x02, 0xff, "Platform Event Trap generated" },
|
||||||
|
{ 0x24, 0x03, 0xff, "Platform generated SNMP trap, OEM format" },
|
||||||
|
/* Entity Presence */
|
||||||
|
{ 0x25, 0x00, 0xff, "Present" },
|
||||||
|
{ 0x25, 0x01, 0xff, "Absent" },
|
||||||
|
{ 0x25, 0x02, 0xff, "Disabled" },
|
||||||
|
/* LAN */
|
||||||
|
{ 0x27, 0x00, 0xff, "Heartbeat Lost" },
|
||||||
|
{ 0x27, 0x01, 0xff, "Heartbeat" },
|
||||||
|
/* Management Subsystem Health */
|
||||||
|
{ 0x28, 0x00, 0xff, "Sensor access degraded or unavailable" },
|
||||||
|
{ 0x28, 0x01, 0xff, "Controller access degraded or unavailable" },
|
||||||
|
{ 0x28, 0x02, 0xff, "Management controller off-line" },
|
||||||
|
{ 0x28, 0x03, 0xff, "Management controller unavailable" },
|
||||||
|
{ 0x28, 0x04, 0xff, "Sensor failure" },
|
||||||
|
{ 0x28, 0x05, 0xff, "FRU failure" },
|
||||||
|
/* Battery */
|
||||||
|
{ 0x29, 0x00, 0xff, "Low" },
|
||||||
|
{ 0x29, 0x01, 0xff, "Failed" },
|
||||||
|
{ 0x29, 0x02, 0xff, "Presence Detected" },
|
||||||
|
/* Version Change */
|
||||||
|
{ 0x2b, 0x00, 0xff, "Hardware change detected" },
|
||||||
|
{ 0x2b, 0x01, 0x00, "Firmware or software change detected" },
|
||||||
|
{ 0x2b, 0x01, 0x01, "Firmware or software change detected, Mngmt Ctrl Dev Id" },
|
||||||
|
{ 0x2b, 0x01, 0x02, "Firmware or software change detected, Mngmt Ctrl Firm Rev" },
|
||||||
|
{ 0x2b, 0x01, 0x03, "Firmware or software change detected, Mngmt Ctrl Dev Rev" },
|
||||||
|
{ 0x2b, 0x01, 0x04, "Firmware or software change detected, Mngmt Ctrl Manuf Id" },
|
||||||
|
{ 0x2b, 0x01, 0x05, "Firmware or software change detected, Mngmt Ctrl IPMI Vers" },
|
||||||
|
{ 0x2b, 0x01, 0x06, "Firmware or software change detected, Mngmt Ctrl Aux Firm Id" },
|
||||||
|
{ 0x2b, 0x01, 0x07, "Firmware or software change detected, Mngmt Ctrl Firm Boot Block" },
|
||||||
|
{ 0x2b, 0x01, 0x08, "Firmware or software change detected, Mngmt Ctrl Other" },
|
||||||
|
{ 0x2b, 0x01, 0x09, "Firmware or software change detected, BIOS/EFI change" },
|
||||||
|
{ 0x2b, 0x01, 0x0A, "Firmware or software change detected, SMBIOS change" },
|
||||||
|
{ 0x2b, 0x01, 0x0B, "Firmware or software change detected, O/S change" },
|
||||||
|
{ 0x2b, 0x01, 0x0C, "Firmware or software change detected, O/S loader change" },
|
||||||
|
{ 0x2b, 0x01, 0x0D, "Firmware or software change detected, Service Diag change" },
|
||||||
|
{ 0x2b, 0x01, 0x0E, "Firmware or software change detected, Mngmt SW agent change" },
|
||||||
|
{ 0x2b, 0x01, 0x0F, "Firmware or software change detected, Mngmt SW App change" },
|
||||||
|
{ 0x2b, 0x01, 0x10, "Firmware or software change detected, Mngmt SW Middle" },
|
||||||
|
{ 0x2b, 0x01, 0x11, "Firmware or software change detected, Prog HW Change (FPGA)" },
|
||||||
|
{ 0x2b, 0x01, 0x12, "Firmware or software change detected, board/FRU module change" },
|
||||||
|
{ 0x2b, 0x01, 0x13, "Firmware or software change detected, board/FRU component change" },
|
||||||
|
{ 0x2b, 0x01, 0x14, "Firmware or software change detected, board/FRU replace equ ver" },
|
||||||
|
{ 0x2b, 0x01, 0x15, "Firmware or software change detected, board/FRU replace new ver" },
|
||||||
|
{ 0x2b, 0x01, 0x16, "Firmware or software change detected, board/FRU replace old ver" },
|
||||||
|
{ 0x2b, 0x01, 0x17, "Firmware or software change detected, board/FRU HW conf change" },
|
||||||
|
{ 0x2b, 0x02, 0xff, "Hardware incompatibility detected" },
|
||||||
|
{ 0x2b, 0x03, 0xff, "Firmware or software incompatibility detected" },
|
||||||
|
{ 0x2b, 0x04, 0xff, "Invalid or unsupported hardware version" },
|
||||||
|
{ 0x2b, 0x05, 0xff, "Invalid or unsupported firmware or software version" },
|
||||||
|
{ 0x2b, 0x06, 0xff, "Hardware change success" },
|
||||||
|
{ 0x2b, 0x07, 0x00, "Firmware or software change success" },
|
||||||
|
{ 0x2b, 0x07, 0x01, "Firmware or software change success, Mngmt Ctrl Dev Id" },
|
||||||
|
{ 0x2b, 0x07, 0x02, "Firmware or software change success, Mngmt Ctrl Firm Rev" },
|
||||||
|
{ 0x2b, 0x07, 0x03, "Firmware or software change success, Mngmt Ctrl Dev Rev" },
|
||||||
|
{ 0x2b, 0x07, 0x04, "Firmware or software change success, Mngmt Ctrl Manuf Id" },
|
||||||
|
{ 0x2b, 0x07, 0x05, "Firmware or software change success, Mngmt Ctrl IPMI Vers" },
|
||||||
|
{ 0x2b, 0x07, 0x06, "Firmware or software change success, Mngmt Ctrl Aux Firm Id" },
|
||||||
|
{ 0x2b, 0x07, 0x07, "Firmware or software change success, Mngmt Ctrl Firm Boot Block" },
|
||||||
|
{ 0x2b, 0x07, 0x08, "Firmware or software change success, Mngmt Ctrl Other" },
|
||||||
|
{ 0x2b, 0x07, 0x09, "Firmware or software change success, BIOS/EFI change" },
|
||||||
|
{ 0x2b, 0x07, 0x0A, "Firmware or software change success, SMBIOS change" },
|
||||||
|
{ 0x2b, 0x07, 0x0B, "Firmware or software change success, O/S change" },
|
||||||
|
{ 0x2b, 0x07, 0x0C, "Firmware or software change success, O/S loader change" },
|
||||||
|
{ 0x2b, 0x07, 0x0D, "Firmware or software change success, Service Diag change" },
|
||||||
|
{ 0x2b, 0x07, 0x0E, "Firmware or software change success, Mngmt SW agent change" },
|
||||||
|
{ 0x2b, 0x07, 0x0F, "Firmware or software change success, Mngmt SW App change" },
|
||||||
|
{ 0x2b, 0x07, 0x10, "Firmware or software change success, Mngmt SW Middle" },
|
||||||
|
{ 0x2b, 0x07, 0x11, "Firmware or software change success, Prog HW Change (FPGA)" },
|
||||||
|
{ 0x2b, 0x07, 0x12, "Firmware or software change success, board/FRU module change" },
|
||||||
|
{ 0x2b, 0x07, 0x13, "Firmware or software change success, board/FRU component change" },
|
||||||
|
{ 0x2b, 0x07, 0x14, "Firmware or software change success, board/FRU replace equ ver" },
|
||||||
|
{ 0x2b, 0x07, 0x15, "Firmware or software change success, board/FRU replace new ver" },
|
||||||
|
{ 0x2b, 0x07, 0x16, "Firmware or software change success, board/FRU replace old ver" },
|
||||||
|
{ 0x2b, 0x07, 0x17, "Firmware or software change success, board/FRU HW conf change" },
|
||||||
|
/* FRU State */
|
||||||
|
{ 0x2c, 0x00, 0xff, "Not Installed" },
|
||||||
|
{ 0x2c, 0x01, 0xff, "Inactive" },
|
||||||
|
{ 0x2c, 0x02, 0xff, "Activation Requested" },
|
||||||
|
{ 0x2c, 0x03, 0xff, "Activation in Progress" },
|
||||||
|
{ 0x2c, 0x04, 0xff, "Active" },
|
||||||
|
{ 0x2c, 0x05, 0xff, "Deactivation Requested" },
|
||||||
|
{ 0x2c, 0x06, 0xff, "Deactivation in Progress" },
|
||||||
|
{ 0x2c, 0x07, 0xff, "Communication lost" },
|
||||||
|
/* PICMG FRU Hot Swap */
|
||||||
|
{ 0xF0, 0x00, 0xFF, "Transition to M0" },
|
||||||
|
{ 0xF0, 0x01, 0xFF, "Transition to M1" },
|
||||||
|
{ 0xF0, 0x02, 0xFF, "Transition to M2" },
|
||||||
|
{ 0xF0, 0x03, 0xFF, "Transition to M3" },
|
||||||
|
{ 0xF0, 0x04, 0xFF, "Transition to M4" },
|
||||||
|
{ 0xF0, 0x05, 0xFF, "Transition to M5" },
|
||||||
|
{ 0xF0, 0x06, 0xFF, "Transition to M6" },
|
||||||
|
{ 0xF0, 0x07, 0xFF, "Transition to M7" },
|
||||||
|
/* PICMG IPMB Physical Link */
|
||||||
|
{ 0xF1, 0x00, 0xff, "IPMB-A disabled, IPMB-B disabled" },
|
||||||
|
{ 0xF1, 0x01, 0xff, "IPMB-A enabled, IPMB-B disabled" },
|
||||||
|
{ 0xF1, 0x02, 0xff, "IPMB-A disabled, IPMB-B enabled" },
|
||||||
|
{ 0xF1, 0x03, 0xff, "IPMB-A enabled, IPMB-B enabled" },
|
||||||
|
/* PICMG Module Hot Swap */
|
||||||
|
{ 0xF2, 0x00, 0xff, "Module Handle Closed" },
|
||||||
|
{ 0xF2, 0x01, 0xff, "Module Handle Opened" },
|
||||||
|
{ 0xF2, 0x02, 0xff, "Quiesced" },
|
||||||
|
{ 0x00, 0x00, 0xff, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ipmi_event_sensor_types vita_sensor_event_types[] = {
|
||||||
|
/* VITA FRU State */
|
||||||
|
{ 0xF0, 0x00, 0xFF, "Transition to M0" },
|
||||||
|
{ 0xF0, 0x01, 0xFF, "Transition to M1" },
|
||||||
|
{ 0xF0, 0x04, 0xFF, "Transition to M4" },
|
||||||
|
{ 0xF0, 0x05, 0xFF, "Transition to M5" },
|
||||||
|
{ 0xF0, 0x06, 0xFF, "Transition to M6" },
|
||||||
|
{ 0xF0, 0x07, 0xFF, "Transition to M7" },
|
||||||
|
/* VITA System IPMB Link */
|
||||||
|
{ 0xF1, 0x00, 0xFF, "IPMB-A disabled, IPMB-B disabled" },
|
||||||
|
{ 0xF1, 0x01, 0xFF, "IPMB-A enabled, IPMB-B disabled" },
|
||||||
|
{ 0xF1, 0x02, 0xFF, "IPMB-A disabled, IPMB-B enabled" },
|
||||||
|
{ 0xF1, 0x03, 0xFF, "IPMB-A enabled, IPMB-B enabled" },
|
||||||
|
/* VITA FRU Temperature */
|
||||||
|
{ 0xF3, 0x00, 0xff, "At or below Lower Non-critical" },
|
||||||
|
{ 0xF3, 0x01, 0xff, "At or below Lower Critical" },
|
||||||
|
{ 0xF3, 0x02, 0xff, "At or below Lower Non-recoverable" },
|
||||||
|
{ 0xF3, 0x03, 0xff, "At or above Upper Non-critical" },
|
||||||
|
{ 0xF3, 0x04, 0xff, "At or above Upper Critical" },
|
||||||
|
{ 0xF3, 0x05, 0xff, "At or above Upper Non-recoverable" },
|
||||||
|
{ 0x00, 0x00, 0xff, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ipmi_event_sensor_types oem_kontron_event_types[] = {
|
||||||
|
/* Board Reset(cPCI) */
|
||||||
|
{ 0xC1, 0x00, 0xff, "Push Button" },
|
||||||
|
{ 0xC1, 0x01, 0xff, "Bridge Reset" },
|
||||||
|
{ 0xC1, 0x02, 0xff, "Backplane" },
|
||||||
|
{ 0xC1, 0x03, 0xff, "Hotswap Fault" },
|
||||||
|
{ 0xC1, 0x04, 0xff, "Hotswap Healty" },
|
||||||
|
{ 0xC1, 0x05, 0xff, "Unknown" },
|
||||||
|
{ 0xC1, 0x06, 0xff, "ITP" },
|
||||||
|
{ 0xC1, 0x07, 0xff, "Hardware Watchdog" },
|
||||||
|
{ 0xC1, 0x08, 0xff, "Software Reset" },
|
||||||
|
/* IPMB-L Link State, based on PICMG IPMB-0 Link state sensor */
|
||||||
|
{ 0xC3, 0x02, 0xff, "IPMB L Disabled" },
|
||||||
|
{ 0xC3, 0x03, 0xff, "IPMB L Enabled" },
|
||||||
|
/* Board Reset */
|
||||||
|
{ 0xC4, 0x00, 0xff, "Push Button" },
|
||||||
|
{ 0xC4, 0x01, 0xff, "Hardware Power Failure" },
|
||||||
|
{ 0xC4, 0x02, 0xff, "Unknown" },
|
||||||
|
{ 0xC4, 0x03, 0xff, "Hardware Watchdog" },
|
||||||
|
{ 0xC4, 0x04, 0xff, "Soft Reset" },
|
||||||
|
{ 0xC4, 0x05, 0xff, "Warm Reset" },
|
||||||
|
{ 0xC4, 0x06, 0xff, "Cold Reset" },
|
||||||
|
{ 0xC4, 0x07, 0xff, "IPMI Command" },
|
||||||
|
{ 0xC4, 0x08, 0xff, "Setup Reset (Save CMOS)" },
|
||||||
|
{ 0xC4, 0x09, 0xff, "Power Up Reset" },
|
||||||
|
/* POST Value */
|
||||||
|
{ 0xC6, 0x0E, 0xff, "Post Error (see data2)" },
|
||||||
|
/* FWUM Status */
|
||||||
|
{ 0xC7, 0x00, 0xff, "First Boot After Upgrade" },
|
||||||
|
{ 0xC7, 0x01, 0xff, "First Boot After Rollback(error)" },
|
||||||
|
{ 0xC7, 0x02, 0xff, "First Boot After Errors (watchdog)" },
|
||||||
|
{ 0xC7, 0x03, 0xff, "First Boot After Manual Rollback" },
|
||||||
|
{ 0xC7, 0x08, 0xff, "Firmware Watchdog Bite, reset occurred" },
|
||||||
|
/* Switch Mngt Software Status */
|
||||||
|
{ 0xC8, 0x00, 0xff, "Not Loaded" },
|
||||||
|
{ 0xC8, 0x01, 0xff, "Initializing" },
|
||||||
|
{ 0xC8, 0x02, 0xff, "Ready" },
|
||||||
|
{ 0xC8, 0x03, 0xff, "Failure (see data2)" },
|
||||||
|
/* Diagnostic Status */
|
||||||
|
{ 0xC9, 0x00, 0xff, "Started" },
|
||||||
|
{ 0xC9, 0x01, 0xff, "Pass" },
|
||||||
|
{ 0xC9, 0x02, 0xff, "Fail" },
|
||||||
|
{ 0xCA, 0x00, 0xff, "In progress"},
|
||||||
|
{ 0xCA, 0x01, 0xff, "Success"},
|
||||||
|
{ 0xCA, 0x02, 0xff, "Failure"},
|
||||||
|
/* FRU Over Current */
|
||||||
|
{ 0xCB, 0x00, 0xff, "Asserted"},
|
||||||
|
{ 0xCB, 0x01, 0xff, "Deasserted"},
|
||||||
|
/* FRU Sensor Error */
|
||||||
|
{ 0xCC, 0x00, 0xff, "Asserted"},
|
||||||
|
{ 0xCC, 0x01, 0xff, "Deasserted"},
|
||||||
|
/* FRU Power Denied */
|
||||||
|
{ 0xCD, 0x00, 0xff, "Asserted"},
|
||||||
|
{ 0xCD, 0x01, 0xff, "Deasserted"},
|
||||||
|
/* Reset */
|
||||||
|
{ 0xCF, 0x00, 0xff, "Asserted"},
|
||||||
|
{ 0xCF, 0x01, 0xff, "Deasserted"},
|
||||||
|
/* END */
|
||||||
|
{ 0x00, 0x00, 0xff, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
int ipmi_sel_main(struct ipmi_intf *, int, char **);
|
||||||
|
void ipmi_sel_print_std_entry(struct ipmi_intf * intf, struct sel_event_record * evt);
|
||||||
|
void ipmi_sel_print_std_entry_verbose(struct ipmi_intf * intf, struct sel_event_record * evt);
|
||||||
|
void ipmi_sel_print_extended_entry(struct ipmi_intf * intf, struct sel_event_record * evt);
|
||||||
|
void ipmi_sel_print_extended_entry_verbose(struct ipmi_intf * intf, struct sel_event_record * evt);
|
||||||
|
void ipmi_get_event_desc(struct ipmi_intf * intf, struct sel_event_record * rec, char ** desc);
|
||||||
|
const char * ipmi_get_sensor_type(struct ipmi_intf *intf, uint8_t code);
|
||||||
|
uint16_t ipmi_sel_get_std_entry(struct ipmi_intf * intf, uint16_t id, struct sel_event_record * evt);
|
||||||
|
char * get_viking_evt_desc(struct ipmi_intf * intf, struct sel_event_record * rec);
|
||||||
|
IPMI_OEM ipmi_get_oem(struct ipmi_intf * intf);
|
||||||
|
char * ipmi_get_oem_desc(struct ipmi_intf * intf, struct sel_event_record * rec);
|
||||||
|
int ipmi_sel_oem_init(const char * filename);
|
||||||
|
const struct ipmi_event_sensor_types *
|
||||||
|
ipmi_get_first_event_sensor_type(struct ipmi_intf *intf, uint8_t sensor_type, uint8_t event_type);
|
||||||
|
const struct ipmi_event_sensor_types *
|
||||||
|
ipmi_get_next_event_sensor_type(const struct ipmi_event_sensor_types *evt);
|
151
include/ipmitool/ipmi_sel_supermicro.h
Normal file
151
include/ipmitool/ipmi_sel_supermicro.h
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
static uint16_t supermicro_x11[] = {
|
||||||
|
0x0958, 0x0955, 0x0953, 0x0952, 0x0941, 0x093A, 0x0939, 0x0938, 0x0937, 0x0930, 0x0927, 0x091D,
|
||||||
|
0x091C, 0x0917, 0x090D, 0x0909, 0x0907, 0x0901, 0x089F, 0x089C, 0x089B, 0x089A, 0x0898, 0x0896,
|
||||||
|
0x0895, 0x0894, 0x0891, 0x0890, 0x0888, 0x0886, 0x0885, 0x0884, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_b11[] = {
|
||||||
|
0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_b2[] = {
|
||||||
|
0x0951, 0x094E, 0x0931, 0x092E, 0x092A, 0x0928, 0x0908, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x10OBi[] = {
|
||||||
|
0x0923, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x10QRH[] = {
|
||||||
|
0x0872, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x10QBL[] = {
|
||||||
|
0x0853, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_brickland[] = {
|
||||||
|
0x0726, 0x083A, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static uint16_t supermicro_x9dal[] = {
|
||||||
|
0x0635, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x9db[] = {
|
||||||
|
0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x9sb[] = {
|
||||||
|
0x0651, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x9[] = {
|
||||||
|
0x0635, 0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637, 0x0651, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_romely[] = {
|
||||||
|
0x0841, 0x0732, 0x0731, 0x0730, 0x0727, 0x0725, 0x0724, 0x0723, 0x0720, 0x0718, 0x0717, 0x0715,
|
||||||
|
0x0713, 0x0711, 0x070E, 0x070A, 0x0709, 0x0708, 0x0706, 0x0705, 0x0704, 0x0702, 0x0701, 0x0700,
|
||||||
|
0x066F, 0x066E, 0x066D, 0x0669, 0x0667, 0x0666, 0x0665, 0x0664, 0x0662, 0x0660, 0x0636, 0x0630,
|
||||||
|
0x062F, 0x062C, 0x0628, 0x0626, 0x0827, 0x070F, 0x0707, 0x0840, 0x0729, 0x0719, 0x0712, 0x070D,
|
||||||
|
0x066C, 0x066A, 0x0625, 0x0714, 0x0710, 0x070C, 0x070B, 0x0668, 0x0663, 0x0661, 0x062B, 0x062A,
|
||||||
|
0x0629, 0x093E, 0x0932, 0x092D, 0x092B, 0x0924, 0x0922, 0x0921, 0x091E, 0x0919, 0x0916, 0x089D,
|
||||||
|
0x0899, 0x0893, 0x0892, 0x0882, 0x0881, 0x0880, 0x087F, 0x087D, 0x0879, 0x0877, 0x086F, 0x086E,
|
||||||
|
0x086D, 0x086C, 0x086B, 0x085C, 0x085B, 0x084B, 0x0865, 0x0864, 0x0860, 0x0859, 0x0858, 0x0857,
|
||||||
|
0x0854, 0x0852, 0x0845, 0x0844, 0x0843, 0x0842, 0x083B, 0x0838, 0x0837, 0x0836, 0x0835, 0x0834,
|
||||||
|
0x0833, 0x0832, 0x0831, 0x0830, 0x0826, 0x0825, 0x0824, 0x0822, 0x0821, 0x0819, 0x0818, 0x0817,
|
||||||
|
0x0816, 0x0815, 0x0814, 0x0728, 0x0813, 0x0812, 0x0810, 0x0807, 0x0806, 0x0805, 0x0804, 0x0803,
|
||||||
|
0x0802, 0x0801, 0x0889, 0x0861, 0x083E, 0x0846, 0x0946, 0x0950, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_b8[] = {
|
||||||
|
0x000A, 0x061c, 0x0620, 0x0101, 0x061f, 0x0612, 0x061e, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_h8[] = {
|
||||||
|
0xa111, 0x0408, 0x0811, 0x1411, 0x0911, 0x1211, 0x1011, 0xcd11, 0x1111, 0xbe11, 0xce11, 0xbd11,
|
||||||
|
0xbc11, 0xa911, 0xaa11, 0xcb11, 0xad11, 0xa811, 0xac11, 0xaf11, 0xa511, 0xa011, 0x1611, 0x2511,
|
||||||
|
0xbf11, 0x1511, 0x2211, 0x2411, 0x1911, 0xab11, 0xd011, 0xae11, 0xca11, 0x0409, 0xa211, 0xa311,
|
||||||
|
0x1311, 0xba11, 0xa711, 0xd111, 0x1711, 0xcf11, 0x2011, 0x1811, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_p8[] = {
|
||||||
|
0x5980, 0x6280, 0x6480, 0x7380, 0x7480, 0x0933, 0x094F, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_x8[] = {
|
||||||
|
0xa880, 0x0403, 0x0100, 0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006,
|
||||||
|
0x040a, 0xf280, 0x060f, 0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614,
|
||||||
|
0x0003, 0x040b, 0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e, 0x061a,
|
||||||
|
0xf580, 0x062e, 0x0009, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_X8[] = {
|
||||||
|
0x000A, 0x061c, 0x0620, 0x0101, 0x061f, 0x0612, 0x061e, 0xa111, 0x0408, 0x0811, 0x1411, 0x0911,
|
||||||
|
0x1211, 0x1011, 0xcd11, 0x1111, 0xbe11, 0xce11, 0xbd11, 0xbc11, 0xa911, 0xaa11, 0xcb11, 0xad11,
|
||||||
|
0xa811, 0xac11, 0xaf11, 0xa511, 0xa011, 0x1611, 0x2511, 0xbf11, 0x1511, 0x2211, 0x2411, 0x1911,
|
||||||
|
0xab11, 0xd011, 0xae11, 0xca11, 0x0409, 0xa211, 0xa311, 0x1311, 0xba11, 0xa711, 0xd111, 0x1711,
|
||||||
|
0xcf11, 0x2011, 0x1811, 0x5980, 0x6280, 0x6480, 0x7380, 0x7480, 0x0933, 0x094F, 0xa880, 0x0403,
|
||||||
|
0x0100, 0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006, 0x040a, 0xf280,
|
||||||
|
0x060f, 0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614, 0x0003, 0x040b,
|
||||||
|
0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e, 0x061a, 0xf580, 0x062e,
|
||||||
|
0x0009, 0xFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t supermicro_older[] = {
|
||||||
|
0x8080, 0x8180, 0x8280, 0x8480, 0x8580, 0x8680, 0x8780, 0x8880, 0x8980, 0x9080, 0x9180, 0x9280,
|
||||||
|
0x9380, 0x9480, 0x9580, 0x9680, 0x9780, 0xA080, 0x9880, 0x9980, 0xB080, 0xB180, 0xB280, 0xB380,
|
||||||
|
0xB480, 0xA280, 0xB580, 0xB680, 0xA580, 0xB780, 0xD180, 0xA380, 0xA480, 0xD680, 0xBA80, 0xD280,
|
||||||
|
0x2111, 0xD380, 0xBC80, 0xBD80, 0xBE80, 0xC080, 0xC180, 0xAA80, 0xBE80, 0xBF80, 0xAB80, 0xD480,
|
||||||
|
0xD580, 0xAF80, 0xAE80, 0xC280, 0xAC80, 0xD080, 0xDA80, 0xDB80, 0xDC80, 0xDD80, 0xA680, 0xDE80,
|
||||||
|
0xAA80, 0xDF80, 0xBB80, 0xA780, 0xF080, 0xF180, 0xB880, 0xC380, 0xB780, 0x2311, 0xA980, 0xF480,
|
||||||
|
0xB980, 0x0002, 0xba80, 0x0602, 0x0603, 0x0604, 0x0607, 0x0410, 0xA611, 0x060A, 0x0611, 0xBB11,
|
||||||
|
0x061D, 0x0622, 0x0623, 0x0624, 0x0627, 0x0631, 0x0633, 0x0634, 0x0690, 0x0691, 0x0640, 0x0641,
|
||||||
|
0x0642, 0x066B, 0x0743, 0x0644, 0x0645, 0x0645, 0x0646, 0x0647, 0x0648, 0x0647, 0x0650, 0x0652,
|
||||||
|
0x0653, 0x0654, 0x0655, 0x0808, 0x0809, 0x0656, 0x0657, 0x0658, 0x0659, 0x0820, 0x0820, 0x0734,
|
||||||
|
0x0823, 0x0828, 0x0829, 0x0839, 0x083C, 0x083D, 0x083F, 0x0847, 0x0848, 0x0849, 0x0850, 0x0851,
|
||||||
|
0x0855, 0x0856, 0x0862, 0x0863, 0x0866, 0x0867, 0x0868, 0x0869, 0x084A, 0x084C, 0x084D, 0x084F,
|
||||||
|
0x085A, 0x085D, 0x085E, 0x085F, 0x086A, 0x0870, 0x0873, 0x0874, 0x0875, 0x0876, 0x0878, 0x087A,
|
||||||
|
0x087B, 0x087C, 0x087E, 0x0883, 0x0887, 0x088A, 0x088B, 0x088C, 0x088D, 0x088E, 0x088F, 0x0897,
|
||||||
|
0x089E, 0x0902, 0x0903, 0x0904, 0x0905, 0x0906, 0x090A, 0x090B, 0x090C, 0x090E, 0x090F, 0x0910,
|
||||||
|
0x0912, 0x0913, 0x0914, 0x0915, 0x0918, 0x091A, 0x091B, 0x091F, 0x0920, 0x0925, 0x0926, 0x0929,
|
||||||
|
0x092C, 0x092F, 0x0934, 0x0935, 0x0936, 0x093B, 0x093C, 0x093D, 0x093F, 0x0940, 0x0942, 0x0943,
|
||||||
|
0x0944, 0x0945, 0x0947, 0x0948, 0x0949, 0x094A, 0x094B, 0x094C, 0x094D, 0x094E, 0x0954, 0x0956,
|
||||||
|
0x0957, 0x0959, 0xFFFF
|
||||||
|
};
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_SENSOR_H
|
#pragma once
|
||||||
#define IPMI_SENSOR_H
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <ipmitool/bswap.h>
|
#include <ipmitool/bswap.h>
|
||||||
@ -65,6 +64,9 @@
|
|||||||
#define STATE_13_ASSERTED 0x20
|
#define STATE_13_ASSERTED 0x20
|
||||||
#define STATE_14_ASSERTED 0x40
|
#define STATE_14_ASSERTED 0x40
|
||||||
|
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct sensor_set_thresh_rq {
|
struct sensor_set_thresh_rq {
|
||||||
uint8_t sensor_num; /* sensor # */
|
uint8_t sensor_num; /* sensor # */
|
||||||
uint8_t set_mask; /* threshold setting mask */
|
uint8_t set_mask; /* threshold setting mask */
|
||||||
@ -74,11 +76,12 @@ struct sensor_set_thresh_rq {
|
|||||||
uint8_t upper_non_crit; /* new upper non critical threshold*/
|
uint8_t upper_non_crit; /* new upper non critical threshold*/
|
||||||
uint8_t upper_crit; /* new upper critical threshold*/
|
uint8_t upper_crit; /* new upper critical threshold*/
|
||||||
uint8_t upper_non_recov; /* new upper non recoverable threshold*/
|
uint8_t upper_non_recov; /* new upper non recoverable threshold*/
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int ipmi_sensor_main(struct ipmi_intf *, int, char **);
|
int ipmi_sensor_main(struct ipmi_intf *, int, char **);
|
||||||
int ipmi_sensor_print_full(struct ipmi_intf *, struct sdr_record_full_sensor *);
|
int ipmi_sensor_print_fc(struct ipmi_intf *, struct sdr_record_common_sensor *, uint8_t);
|
||||||
int ipmi_sensor_print_compact(struct ipmi_intf *, struct sdr_record_compact_sensor *);
|
int ipmi_sensor_get_sensor_reading_factors( struct ipmi_intf * intf, struct sdr_record_full_sensor * sensor, uint8_t reading);
|
||||||
|
|
||||||
#endif /* IPMI_SENSOR_H */
|
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_SESSION_H
|
#pragma once
|
||||||
#define IPMI_SESSION_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
@ -43,6 +42,9 @@
|
|||||||
/*
|
/*
|
||||||
* From table 22.25 of the IPMIv2 specification
|
* From table 22.25 of the IPMIv2 specification
|
||||||
*/
|
*/
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
struct get_session_info_rsp
|
struct get_session_info_rsp
|
||||||
{
|
{
|
||||||
uint8_t session_handle;
|
uint8_t session_handle;
|
||||||
@ -116,10 +118,11 @@ struct get_session_info_rsp
|
|||||||
uint16_t console_port; /* LSBF */
|
uint16_t console_port; /* LSBF */
|
||||||
} modem_data;
|
} modem_data;
|
||||||
} channel_data;
|
} channel_data;
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
|
#pragma pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ipmi_session_main(struct ipmi_intf *, int, char **);
|
int ipmi_session_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
#endif /*IPMI_CHANNEL_H*/
|
|
@ -30,13 +30,13 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_SOL_H
|
#pragma once
|
||||||
#define IPMI_SOL_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
#define SOL_ESCAPE_CHARACTER_DEFAULT '~'
|
#define SOL_ESCAPE_CHARACTER_DEFAULT '~'
|
||||||
#define SOL_KEEPALIVE_TIMEOUT 30
|
#define SOL_KEEPALIVE_TIMEOUT 15
|
||||||
|
#define SOL_KEEPALIVE_RETRIES 3
|
||||||
|
|
||||||
#define IPMI_SOL_SERIAL_ALERT_MASK_SUCCEED 0x08
|
#define IPMI_SOL_SERIAL_ALERT_MASK_SUCCEED 0x08
|
||||||
#define IPMI_SOL_SERIAL_ALERT_MASK_DEFERRED 0x04
|
#define IPMI_SOL_SERIAL_ALERT_MASK_DEFERRED 0x04
|
||||||
@ -63,22 +63,41 @@ struct sol_config_parameters {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The ACTIVATE PAYLOAD command reponse structure
|
* The ACTIVATE PAYLOAD command response structure
|
||||||
* From table 24-2 of the IPMI v2.0 spec
|
* From table 24-2 of the IPMI v2.0 spec
|
||||||
*/
|
*/
|
||||||
|
#ifdef PRAGMA_PACK
|
||||||
|
#pramga pack(1)
|
||||||
|
#endif
|
||||||
struct activate_payload_rsp {
|
struct activate_payload_rsp {
|
||||||
uint8_t auxiliary_data[4];
|
uint8_t auxiliary_data[4];
|
||||||
uint8_t inbound_payload_size[2]; /* LS byte first */
|
uint8_t inbound_payload_size[2]; /* LS byte first */
|
||||||
uint8_t outbound_payload_size[2]; /* LS byte first */
|
uint8_t outbound_payload_size[2]; /* LS byte first */
|
||||||
uint8_t payload_udp_port[2]; /* LS byte first */
|
uint8_t payload_udp_port[2]; /* LS byte first */
|
||||||
uint8_t payload_vlan_number[2]; /* LS byte first */
|
uint8_t payload_vlan_number[2]; /* LS byte first */
|
||||||
} __attribute__ ((packed));
|
} ATTRIBUTE_PACKING;
|
||||||
|
#ifdef PRAGMA_PACK
|
||||||
|
#pramga pack(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Small function to validate that user-supplied SOL
|
||||||
|
* configuration parameter values we store in uint8_t
|
||||||
|
* data type falls within valid range. With minval
|
||||||
|
* and maxval parameters we can use the same function
|
||||||
|
* to validate parameters that have different ranges
|
||||||
|
* of values.
|
||||||
|
*
|
||||||
|
* function will return -1 if value is not valid, or
|
||||||
|
* will return 0 if valid.
|
||||||
|
*/
|
||||||
|
int ipmi_sol_set_param_isvalid_uint8_t(const char *strval,
|
||||||
|
const char *name,
|
||||||
|
uint8_t minval,
|
||||||
|
uint8_t maxval,
|
||||||
|
uint8_t *out_value);
|
||||||
|
|
||||||
int ipmi_sol_main(struct ipmi_intf *, int, char **);
|
int ipmi_sol_main(struct ipmi_intf *, int, char **);
|
||||||
int ipmi_get_sol_info(struct ipmi_intf * intf,
|
int ipmi_get_sol_info(struct ipmi_intf *intf,
|
||||||
uint8_t channel,
|
uint8_t channel,
|
||||||
struct sol_config_parameters * params);
|
struct sol_config_parameters *params);
|
||||||
|
|
||||||
|
|
||||||
#endif /* IPMI_SOL_H */
|
|
@ -30,31 +30,48 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_STRINGS_H
|
#pragma once
|
||||||
#define IPMI_STRINGS_H
|
|
||||||
|
|
||||||
#include <ipmitool/helper.h>
|
#include <ipmitool/helper.h>
|
||||||
|
|
||||||
|
#define CC_STRING(cc) val2str(cc, completion_code_vals)
|
||||||
|
|
||||||
extern const struct valstr completion_code_vals[];
|
extern const struct valstr completion_code_vals[];
|
||||||
extern const struct valstr entity_id_vals[];
|
extern const struct valstr entity_id_vals[];
|
||||||
extern const struct valstr entity_device_type_vals[];
|
extern const struct valstr entity_device_type_vals[];
|
||||||
extern const struct valstr ipmi_netfn_vals[];
|
extern const struct valstr ipmi_netfn_vals[];
|
||||||
extern const struct valstr ipmi_channel_activity_type_vals[];
|
extern const struct valstr ipmi_channel_activity_type_vals[];
|
||||||
extern const struct valstr ipmi_privlvl_vals[];
|
extern const struct valstr ipmi_privlvl_vals[];
|
||||||
extern const struct valstr impi_bit_rate_vals[];
|
extern const struct valstr ipmi_bit_rate_vals[];
|
||||||
extern const struct valstr ipmi_set_in_progress_vals[];
|
extern const struct valstr ipmi_set_in_progress_vals[];
|
||||||
extern const struct valstr ipmi_authtype_session_vals[];
|
extern const struct valstr ipmi_authtype_session_vals[];
|
||||||
extern const struct valstr ipmi_authtype_vals[];
|
extern const struct valstr ipmi_authtype_vals[];
|
||||||
extern const struct valstr ipmi_channel_protocol_vals[];
|
extern const struct valstr ipmi_channel_protocol_vals[];
|
||||||
extern const struct valstr ipmi_channel_medium_vals[];
|
extern const struct valstr ipmi_channel_medium_vals[];
|
||||||
extern const struct valstr ipmi_chassis_power_control_vals[];
|
extern const struct valstr ipmi_chassis_power_control_vals[];
|
||||||
|
extern const struct valstr ipmi_chassis_restart_cause_vals[];
|
||||||
extern const struct valstr ipmi_auth_algorithms[];
|
extern const struct valstr ipmi_auth_algorithms[];
|
||||||
extern const struct valstr ipmi_integrity_algorithms[];
|
extern const struct valstr ipmi_integrity_algorithms[];
|
||||||
extern const struct valstr ipmi_encryption_algorithms[];
|
extern const struct valstr ipmi_encryption_algorithms[];
|
||||||
extern const struct valstr ipmi_oem_info[];
|
extern const struct valstr ipmi_user_enable_status_vals[];
|
||||||
|
extern const struct valstr *ipmi_oem_info;
|
||||||
|
void ipmi_oem_info_init();
|
||||||
|
void ipmi_oem_info_free();
|
||||||
|
|
||||||
extern const struct oemvalstr ipmi_oem_sdr_type_vals[];
|
extern const struct valstr picmg_frucontrol_vals[];
|
||||||
|
extern const struct valstr picmg_clk_family_vals[];
|
||||||
|
extern const struct oemvalstr picmg_clk_accuracy_vals[];
|
||||||
|
extern const struct oemvalstr picmg_clk_resource_vals[];
|
||||||
|
extern const struct oemvalstr picmg_clk_id_vals[];
|
||||||
|
|
||||||
|
extern const struct valstr picmg_busres_id_vals[];
|
||||||
|
extern const struct valstr picmg_busres_board_cmd_vals[];
|
||||||
|
extern const struct valstr picmg_busres_shmc_cmd_vals[];
|
||||||
|
extern const struct oemvalstr picmg_busres_board_status_vals[];
|
||||||
|
extern const struct oemvalstr picmg_busres_shmc_status_vals[];
|
||||||
|
|
||||||
|
/* these are similar, expect that the lookup takes the IANA number
|
||||||
#endif /*IPMI_STRINGS_H*/
|
as first parameter */
|
||||||
|
extern const struct oemvalstr ipmi_oem_product_info[];
|
||||||
|
extern const char *ipmi_generic_sensor_type_vals[];
|
||||||
|
extern const struct oemvalstr ipmi_oem_sensor_type_vals[];
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
* Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_SUNOEM_H
|
#pragma once
|
||||||
#define IPMI_SUNOEM_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
@ -39,19 +38,32 @@
|
|||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
#include <ipmitool/ipmi_sdr.h>
|
#include <ipmitool/ipmi_sdr.h>
|
||||||
|
|
||||||
#define IPMI_NETFN_SUNOEM 0x2e
|
#define IPMI_NETFN_SUNOEM 0x2e
|
||||||
|
|
||||||
#define IPMI_SUNOEM_SET_SSH_KEY 0x01
|
#define IPMI_SUNOEM_SET_SSH_KEY 0x01
|
||||||
#define IPMI_SUNOEM_DEL_SSH_KEY 0x02
|
#define IPMI_SUNOEM_DEL_SSH_KEY 0x02
|
||||||
#define IPMI_SUNOEM_GET_HEALTH_STATUS 0x10
|
#define IPMI_SUNOEM_GET_HEALTH_STATUS 0x10
|
||||||
#define IPMI_SUNOEM_SET_FAN_SPEED 0x20
|
#define IPMI_SUNOEM_CLI 0x19
|
||||||
#define IPMI_SUNOEM_LED_GET 0x21
|
#define IPMI_SUNOEM_SET_FAN_SPEED 0x20
|
||||||
#define IPMI_SUNOEM_LED_SET 0x22
|
#define IPMI_SUNOEM_LED_GET 0x21
|
||||||
|
#define IPMI_SUNOEM_LED_SET 0x22
|
||||||
|
#define IPMI_SUNOEM_ECHO 0x23
|
||||||
|
#define IPMI_SUNOEM_VERSION 0x24
|
||||||
|
#define IPMI_SUNOEM_NACNAME 0x29
|
||||||
|
#define IPMI_SUNOEM_GETVAL 0x2A
|
||||||
|
#define IPMI_SUNOEM_SETVAL 0x2C
|
||||||
|
#define IPMI_SUNOEM_SENSOR_SET 0x3A
|
||||||
|
#define IPMI_SUNOEM_SET_FAN_MODE 0x41
|
||||||
|
#define IPMI_SUNOEM_CORE_TUNNEL 0x44
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Error codes of sunoem functions
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
SUNOEM_EC_SUCCESS = 0,
|
||||||
|
SUNOEM_EC_INVALID_ARG = 1,
|
||||||
|
SUNOEM_EC_BMC_NOT_RESPONDING = 2,
|
||||||
|
SUNOEM_EC_BMC_CCODE_NONZERO = 3
|
||||||
|
} sunoem_ec_t;
|
||||||
|
|
||||||
int ipmi_sunoem_main(struct ipmi_intf *, int, char **);
|
int ipmi_sunoem_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
struct ipmi_rs * sunoem_led_get(struct ipmi_intf * intf, struct sdr_record_generic_locator * dev, int ledtype);
|
|
||||||
struct ipmi_rs * sunoem_led_set(struct ipmi_intf * intf, struct sdr_record_generic_locator * dev, int ledtype, int ledmode);
|
|
||||||
|
|
||||||
#endif /*IPMI_SUNOEM_H*/
|
|
||||||
|
|
90
include/ipmitool/ipmi_time.h
Normal file
90
include/ipmitool/ipmi_time.h
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 Alexander Amelkin. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the copyright holder, nor the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* THE COPYRIGHT HOLDER AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* THE COPYRIGHT HOLDER OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE,
|
||||||
|
* PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
|
||||||
|
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE
|
||||||
|
* THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS
|
||||||
|
* SOFTWARE, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY
|
||||||
|
* OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
extern bool time_in_utc;
|
||||||
|
|
||||||
|
/* Special values according to IPMI v2.0, rev. 1.1, section 37.1 */
|
||||||
|
#define IPMI_TIME_UNSPECIFIED 0xFFFFFFFFu
|
||||||
|
#define IPMI_TIME_INIT_DONE 0x20000000u
|
||||||
|
|
||||||
|
#define SECONDS_A_DAY (24 * 60 * 60)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check whether the timestamp is in seconds since Epoch or since
|
||||||
|
* the system startup.
|
||||||
|
*/
|
||||||
|
static inline bool ipmi_timestamp_is_special(time_t ts)
|
||||||
|
{
|
||||||
|
return (ts < IPMI_TIME_INIT_DONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check whether the timestamp is valid at all
|
||||||
|
*/
|
||||||
|
static inline bool ipmi_timestamp_is_valid(time_t ts)
|
||||||
|
{
|
||||||
|
return (ts != IPMI_TIME_UNSPECIFIED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Just 26 characters are required for asctime_r(), plus timezone info.
|
||||||
|
* However just to be safe locale-wise and assuming that in no locale
|
||||||
|
* the date/time string exceeds the 'standard' legacy terminal width,
|
||||||
|
* the buffer size is set here to 80.
|
||||||
|
*/
|
||||||
|
#define IPMI_ASCTIME_SZ 80
|
||||||
|
typedef char ipmi_datebuf_t[IPMI_ASCTIME_SZ];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are ipmitool-specific versions that take
|
||||||
|
* in account the command line options
|
||||||
|
*/
|
||||||
|
char *ipmi_asctime_r(time_t stamp, ipmi_datebuf_t outbuf);
|
||||||
|
size_t ipmi_strftime(char *s, size_t max, const char *format, time_t stamp)
|
||||||
|
__attribute__((format(strftime, 3, 0)));
|
||||||
|
|
||||||
|
/* These return pointers to static arrays and aren't thread safe */
|
||||||
|
char *ipmi_timestamp_fmt(uint32_t stamp, const char *fmt)
|
||||||
|
__attribute__((format(strftime, 2, 0)));
|
||||||
|
char *ipmi_timestamp_string(uint32_t stamp); /* Day Mon DD HH:MM:SS YYYY ZZZ */
|
||||||
|
char *ipmi_timestamp_numeric(uint32_t stamp); /* MM/DD/YYYY HH:MM:SS ZZZ */
|
||||||
|
char *ipmi_timestamp_date(uint32_t stamp); /* MM/DD/YYYY ZZZ */
|
||||||
|
char *ipmi_timestamp_time(uint32_t stamp); /* HH:MM:SS ZZZ */
|
||||||
|
|
||||||
|
/* Subtract the UTC offset from local time_t */
|
||||||
|
time_t ipmi_localtime2utc(time_t local);
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_TSOL_H
|
#pragma once
|
||||||
#define IPMI_TSOL_H
|
|
||||||
|
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
@ -42,5 +41,3 @@
|
|||||||
#define IPMI_TSOL_DEF_PORT 6230
|
#define IPMI_TSOL_DEF_PORT 6230
|
||||||
|
|
||||||
int ipmi_tsol_main(struct ipmi_intf *, int, char **);
|
int ipmi_tsol_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
#endif /* IPMI_TSOL_H */
|
|
@ -30,60 +30,54 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMI_USER_H
|
#pragma once
|
||||||
#define IPMI_USER_H
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
#include <ipmitool/ipmi.h>
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
#define IPMI_PASSWORD_DISABLE_USER 0x00
|
||||||
|
#define IPMI_PASSWORD_ENABLE_USER 0x01
|
||||||
|
#define IPMI_PASSWORD_SET_PASSWORD 0x02
|
||||||
|
#define IPMI_PASSWORD_TEST_PASSWORD 0x03
|
||||||
|
|
||||||
/*
|
#define IPMI_USER_ENABLE_UNSPECIFIED 0x00
|
||||||
* The GET USER ACCESS response from table 22-32 of the IMPI v2.0 spec
|
#define IPMI_USER_ENABLE_ENABLED 0x40
|
||||||
*/
|
#define IPMI_USER_ENABLE_DISABLED 0x80
|
||||||
struct user_access_rsp {
|
#define IPMI_USER_ENABLE_RESERVED 0xC0
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
uint8_t maximum_ids : 6;
|
|
||||||
#else
|
|
||||||
uint8_t maximum_ids : 6;
|
|
||||||
uint8_t __reserved1 : 2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if WORDS_BIGENDIAN
|
#define IPMI_UID_MASK 0x3F /* The user_id is 6-bit and is usually in bits [5:0] */
|
||||||
uint8_t __reserved2 : 2;
|
#define IPMI_UID(id) ((id) & IPMI_UID_MASK)
|
||||||
uint8_t enabled_user_count : 6;
|
|
||||||
#else
|
|
||||||
uint8_t enabled_user_count : 6;
|
|
||||||
uint8_t __reserved2 : 2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved3 : 2;
|
|
||||||
uint8_t fixed_name_count : 6;
|
|
||||||
#else
|
|
||||||
uint8_t fixed_name_count : 6;
|
|
||||||
uint8_t __reserved3 : 2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
uint8_t __reserved4 : 1;
|
|
||||||
uint8_t no_callin_access : 1;
|
|
||||||
uint8_t link_auth_access : 1;
|
|
||||||
uint8_t ipmi_messaging_access : 1;
|
|
||||||
uint8_t channel_privilege_limit : 4;
|
|
||||||
#else
|
|
||||||
uint8_t channel_privilege_limit : 4;
|
|
||||||
uint8_t ipmi_messaging_access : 1;
|
|
||||||
uint8_t link_auth_access : 1;
|
|
||||||
uint8_t no_callin_access : 1;
|
|
||||||
uint8_t __reserved4 : 1;
|
|
||||||
#endif
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
|
/* (22.27) Get and (22.26) Set User Access */
|
||||||
|
struct user_access_t {
|
||||||
|
uint8_t callin_callback;
|
||||||
|
uint8_t channel;
|
||||||
|
uint8_t enabled_user_ids;
|
||||||
|
uint8_t enable_status;
|
||||||
|
uint8_t fixed_user_ids;
|
||||||
|
uint8_t ipmi_messaging;
|
||||||
|
uint8_t link_auth;
|
||||||
|
uint8_t max_user_ids;
|
||||||
|
uint8_t privilege_limit;
|
||||||
|
uint8_t session_limit;
|
||||||
|
uint8_t user_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* (22.29) Get User Name */
|
||||||
|
struct user_name_t {
|
||||||
|
uint8_t user_id;
|
||||||
|
uint8_t user_name[17];
|
||||||
|
};
|
||||||
|
|
||||||
int ipmi_user_main(struct ipmi_intf *, int, char **);
|
int ipmi_user_main(struct ipmi_intf *, int, char **);
|
||||||
|
int _ipmi_get_user_access(struct ipmi_intf *intf,
|
||||||
#endif /* IPMI_USER_H */
|
struct user_access_t *user_access_rsp);
|
||||||
|
int _ipmi_get_user_name(struct ipmi_intf *intf, struct user_name_t *user_name);
|
||||||
|
int _ipmi_set_user_access(struct ipmi_intf *intf,
|
||||||
|
struct user_access_t *user_access_req,
|
||||||
|
uint8_t change_priv_limit_only);
|
||||||
|
int _ipmi_set_user_password(struct ipmi_intf *intf,
|
||||||
|
uint8_t user_id, uint8_t operation,
|
||||||
|
const char *password, uint8_t is_twenty_byte);
|
46
include/ipmitool/ipmi_vita.h
Normal file
46
include/ipmitool/ipmi_vita.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Pigeon Point Systems. All right reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/* VITA 46.11 commands */
|
||||||
|
#define VITA_GET_VSO_CAPABILITIES_CMD 0x00
|
||||||
|
#define VITA_FRU_CONTROL_CMD 0x04
|
||||||
|
#define VITA_GET_FRU_LED_PROPERTIES_CMD 0x05
|
||||||
|
#define VITA_GET_LED_COLOR_CAPABILITIES_CMD 0x06
|
||||||
|
#define VITA_SET_FRU_LED_STATE_CMD 0x07
|
||||||
|
#define VITA_GET_FRU_LED_STATE_CMD 0x08
|
||||||
|
#define VITA_SET_FRU_STATE_POLICY_BITS_CMD 0x0A
|
||||||
|
#define VITA_GET_FRU_STATE_POLICY_BITS_CMD 0x0B
|
||||||
|
#define VITA_SET_FRU_ACTIVATION_CMD 0x0C
|
||||||
|
#define VITA_GET_FRU_ADDRESS_INFO_CMD 0x40
|
||||||
|
|
||||||
|
/* VITA 46.11 site types */
|
||||||
|
#define VITA_FRONT_VPX_MODULE 0x00
|
||||||
|
#define VITA_POWER_ENTRY 0x01
|
||||||
|
#define VITA_CHASSIS_FRU 0x02
|
||||||
|
#define VITA_DEDICATED_CHMC 0x03
|
||||||
|
#define VITA_FAN_TRAY 0x04
|
||||||
|
#define VITA_FAN_TRAY_FILTER 0x05
|
||||||
|
#define VITA_ALARM_PANEL 0x06
|
||||||
|
#define VITA_XMC 0x07
|
||||||
|
#define VITA_VPX_RTM 0x09
|
||||||
|
#define VITA_FRONT_VME_MODULE 0x0A
|
||||||
|
#define VITA_FRONT_VXS_MODULE 0x0B
|
||||||
|
#define VITA_POWER_SUPPLY 0x0C
|
||||||
|
#define VITA_FRONT_VITA62_MODULE 0x0D
|
||||||
|
#define VITA_71_MODULE 0x0E
|
||||||
|
#define VITA_FMC 0x0F
|
||||||
|
|
||||||
|
|
||||||
|
#define GROUP_EXT_VITA 0x03
|
||||||
|
|
||||||
|
extern uint8_t
|
||||||
|
vita_discover(struct ipmi_intf *intf);
|
||||||
|
|
||||||
|
extern uint8_t
|
||||||
|
ipmi_vita_ipmb_address(struct ipmi_intf *intf);
|
||||||
|
|
||||||
|
extern int
|
||||||
|
ipmi_vita_main(struct ipmi_intf * intf, int argc, char ** argv);
|
@ -30,8 +30,7 @@
|
|||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IPMITOOL_LOG_H
|
#pragma once
|
||||||
#define IPMITOOL_LOG_H
|
|
||||||
|
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
|
||||||
@ -54,10 +53,6 @@
|
|||||||
|
|
||||||
void log_init(const char * name, int isdaemon, int verbose);
|
void log_init(const char * name, int isdaemon, int verbose);
|
||||||
void log_halt(void);
|
void log_halt(void);
|
||||||
void log_level_set(int level);
|
void log_level_set(int verbose);
|
||||||
int log_level_get(void);
|
|
||||||
void lprintf(int level, const char * format, ...);
|
void lprintf(int level, const char * format, ...);
|
||||||
void lperror(int level, const char * format, ...);
|
void lperror(int level, const char * format, ...);
|
||||||
|
|
||||||
#endif /*IPMITOOL_LOG_H*/
|
|
||||||
|
|
@ -1,218 +0,0 @@
|
|||||||
version 1.8.9 released 2007-03-06
|
|
||||||
* Added initial AMC ekey query operation support
|
|
||||||
* Improvements to ekeying support (PICMG 3.x only)
|
|
||||||
* Added initial interactive edition support for multirec; added IANA
|
|
||||||
verification before interpreting PICMG records.
|
|
||||||
* Added edit support for AMC activation "Maximum Internal Current"
|
|
||||||
* Fix bug generating garbage on the screen when handling GetDeviceId
|
|
||||||
and sol traffic occurs
|
|
||||||
* Added ability to map OEM sensor types to OEM description string using
|
|
||||||
IANA number; moved IANA number table
|
|
||||||
* Fix lan set access command to use value already saved within
|
|
||||||
parameters for PEF and authentication
|
|
||||||
* Fix bug in cmd ipmitool lan stats get 1
|
|
||||||
* Add support to allow ipmitool/ipmievd to target specific device
|
|
||||||
nodes on multi-BMC systems
|
|
||||||
* Add support for name+privilege lookup for lanplus sessions
|
|
||||||
* Fix time_t conversion bug for 64-bit OS
|
|
||||||
* Added prefix of hostname on sel ipmievd sessions
|
|
||||||
* Fixed FWUM Get Info
|
|
||||||
* Fix ipmievd fd closing bug
|
|
||||||
* Add set-in-progress flag support to chassis bootdev
|
|
||||||
* Added new chassis bootdev options
|
|
||||||
* Add sol payload enable/disable comman
|
|
||||||
* Fix SOL set errors when commit-write not supported
|
|
||||||
* Fix reset of session timeout for lanplus interface
|
|
||||||
* Fixed lan interface accessibility timeout handling
|
|
||||||
* Fix bug with Function Get Channel Cipher Suites command when
|
|
||||||
more than 1 page used.
|
|
||||||
* Fix missing firmware firewall top-level command
|
|
||||||
* Fix bug in SOL keepalive functionality
|
|
||||||
* Fix SOLv2 NACK and retry handling for Intel ESB2 BMC
|
|
||||||
* Added ipmi_sel_get_oem_sensor* APIs
|
|
||||||
* Added HPM.1 support
|
|
||||||
* Fix segfault when incorrect oem option supplied
|
|
||||||
* Fix bus problem with spd command
|
|
||||||
* Fix segfault in SOL when remote BMC does not return packet
|
|
||||||
* Adjust packet length for AMC.0 retricting IPMB packets to 32 bytes
|
|
||||||
* Added lan packet size reduction mechanism
|
|
||||||
* Fix bug with sendMessage of bad length with different target
|
|
||||||
* Fix for big endian (PPC) architecture
|
|
||||||
* NetBSD fixes
|
|
||||||
* Fix segfault and channel problem with user priv command
|
|
||||||
* Add support for bus/chan on i2c raw command
|
|
||||||
* Add freeipmi interface support
|
|
||||||
* Add remote spd printing
|
|
||||||
* Add better detection of linux/compiler.h to config
|
|
||||||
* Makefile changes to fix makedistcheck, etc.
|
|
||||||
|
|
||||||
version 1.8.8
|
|
||||||
* Fix segfaults in sensor data repository list
|
|
||||||
* Fix ipmievd to open interface before daemonizing
|
|
||||||
* Fix IPMIv1.5 authtype NONE to ignore supplied password
|
|
||||||
* Fix cipher suite display bug in lan print
|
|
||||||
* Fix typo in IPMIv2 SOL output when sending break
|
|
||||||
* Fix improper LUN handling with Tyan SOL
|
|
||||||
* Add LUN support to OpenIPMI interface
|
|
||||||
* Add support for Kontron OEM commands
|
|
||||||
* Update to Kontron Firmware Update command
|
|
||||||
|
|
||||||
version 1.8.7
|
|
||||||
* Remove nuclear clause from license
|
|
||||||
* Add Sun OEM command for blades
|
|
||||||
* Increase argument size for raw commands in shell/exec
|
|
||||||
* Fix handling of LUNs for LAN interfaces
|
|
||||||
* Add IPMIv2 SOL loopback test
|
|
||||||
* Add support for IBM OEM SEL messages
|
|
||||||
* Disable file paranoia checks on read files by default
|
|
||||||
* Support IPMIv2 SOL on older Intel boxes
|
|
||||||
* Display message and exit if keepalive fails during SOL
|
|
||||||
* Add support for setting VLAN id and priority
|
|
||||||
* Add support for FreeBSD OpenIPMI-compatible driver
|
|
||||||
* Add support for IPMIv2 Firmware Firewall
|
|
||||||
* Fix gcc4 compile warnings
|
|
||||||
* Make ipmievd generate pidfile
|
|
||||||
* Add initscripts for ipmievd
|
|
||||||
|
|
||||||
version 1.8.6
|
|
||||||
* Fix memory corruption when sending encrypted SOL traffic
|
|
||||||
* Add keepalive timer to IPMIv2 SOL sessions
|
|
||||||
|
|
||||||
version 1.8.5
|
|
||||||
* Add support for settable SOL escape character with -e option
|
|
||||||
* Add support for Kg BMC key for IPMIv2 authentication with -k option
|
|
||||||
* Add support for Tyan IPMIv1.5 SOL with tsol command
|
|
||||||
* Add support for PICMG devices
|
|
||||||
* Add support for OEM SEL event parsing
|
|
||||||
* Add support for command bridging over lan and lanplus interfaces
|
|
||||||
* New 'chassis selftest' command
|
|
||||||
* Many bufxies and patches from contributors
|
|
||||||
|
|
||||||
version 1.8.3
|
|
||||||
* Add support for 'sel readraw' and 'sel writeraw' commands.
|
|
||||||
* Add support for entering NetFn as a string for RAW commands.
|
|
||||||
* Add support for appending distro tag to integrated RPM builds.
|
|
||||||
* Fix LAN parameter printing to handle Invalid Data Field response
|
|
||||||
without errors.
|
|
||||||
* Add 5ms delay to IPMIv2 SOL retry packets
|
|
||||||
* IPMIv2 interface will now correctly set session privilege level
|
|
||||||
to requested level after session is opened.
|
|
||||||
|
|
||||||
version 1.8.2 (released May 18 2005)
|
|
||||||
* Fix FRU reading for large (>255 bytes) areas.
|
|
||||||
* Overhaul to ipmievd to support SEL polling in addition to OpenIPMI.
|
|
||||||
* Fix LAN parameter segfault when no Ciphers supported by BMC.
|
|
||||||
* Fix IPMIv2 support on Intel v2 BMCs (use -o intelplus).
|
|
||||||
* Separate option parsing code from main ipmitool source file.
|
|
||||||
* Add raw I2C support with IPMI Master Read-Write command.
|
|
||||||
* Add support for new 'sdr elist' extended output format.
|
|
||||||
* Add support for listing sensors by type with 'sdr type' command.
|
|
||||||
* Add support for new 'sel elist' extended output format that
|
|
||||||
cross-references events with sensors.
|
|
||||||
* Add support for sending dynamically generated platform events
|
|
||||||
based on existing sensor information.
|
|
||||||
* New '-S' argument to read local SDR cache created with 'sdr dump'.
|
|
||||||
* Updated manpage for ipmitool and ipmievd.
|
|
||||||
|
|
||||||
version 1.8.1
|
|
||||||
* ipmievd installs in /usr/sbin
|
|
||||||
|
|
||||||
version 1.8.0
|
|
||||||
* Fix IPMIv2.0 issues
|
|
||||||
* Fix chassis boot parameter support
|
|
||||||
* Add support for linear sensors
|
|
||||||
|
|
||||||
version 1.7.1
|
|
||||||
* Update bmc plugin to work with new Solaris bmc driver (new ioctl
|
|
||||||
for interface detection and new STREAMS message-based interface)
|
|
||||||
|
|
||||||
version 1.7.0
|
|
||||||
* Propogate errors correctly so exit status will be useful
|
|
||||||
* More consistent display of errors including completion code text
|
|
||||||
* Errors and debug is send to stderr now
|
|
||||||
* New "sel get" command that will print details about SEL entry
|
|
||||||
and corresponding SDR records as well as FRUs via entity association
|
|
||||||
* Improved event generator, now supports reading events from text file
|
|
||||||
* New "-o oemtype" option for specifying OEM boards
|
|
||||||
exsting types are "supermicro" and "intelwv2"
|
|
||||||
* New PEF subsystem from Tim Murphy at Dell
|
|
||||||
* New "bmc" plugin for Solaris 10 x86
|
|
||||||
* Many bugfixes and contributed patches
|
|
||||||
|
|
||||||
version 1.6.2
|
|
||||||
* Support for Supermicro BMC OEM authentication method
|
|
||||||
|
|
||||||
version 1.6.1
|
|
||||||
* Fix minor problem with LAN parameter setting
|
|
||||||
|
|
||||||
version 1.6.0
|
|
||||||
* Add a README file
|
|
||||||
* Add Solaris x86 interface plugin
|
|
||||||
* Add support for building Solaris packages
|
|
||||||
* Fix segfault when doing "sel list" (from Matthew Braithwaite)
|
|
||||||
* Fix "chassis identify" on some BMCs (from ebrower@sourceforge)
|
|
||||||
* Add command "bmc info" and related output (from ebrower@sourceforge)
|
|
||||||
* Add support for IPMIv2 and Serial-over-LAN from Jeremy at Newisys
|
|
||||||
* Add support for building RPMs as non-root user
|
|
||||||
* Add new "shell" and "exec" commands
|
|
||||||
* Lots of other contributed patches
|
|
||||||
|
|
||||||
version 1.5.9
|
|
||||||
* Add ability to get a particular sensor by name
|
|
||||||
* Add ability to set a particular sensor threshold
|
|
||||||
* Add support for displaying V2 channel authentication levels
|
|
||||||
* Add README for rrdtool scripts in contrib directory
|
|
||||||
* Improve lan interface retry handling
|
|
||||||
* Support prompting for password or reading from environment
|
|
||||||
* Move chaninfo command into channel subcommand
|
|
||||||
* Fix reservation ID handling when two sessions open to BMC
|
|
||||||
* Fix reading of large FRU data
|
|
||||||
* Add configure option for changing binary to ipmiadm for Solaris
|
|
||||||
* Fix compile problem on Solaris 8
|
|
||||||
|
|
||||||
version 1.5.8
|
|
||||||
* Enable static compilation of interfaces
|
|
||||||
* Fix types to be 64-bit safe
|
|
||||||
* Fix compilation problems on Solaris
|
|
||||||
* Fix multiple big-endian problems for Solaris/SPARC
|
|
||||||
* Fix channel access to save settings to NVRAM
|
|
||||||
* Set channel privilege limit to ADMIN during "access on"
|
|
||||||
* Enable gratuitous ARP in bmcautoconf.sh
|
|
||||||
* Add support for Linux kernel panic messages in SEL output
|
|
||||||
* Add support for type 3 SDR records
|
|
||||||
|
|
||||||
version 1.5.7
|
|
||||||
* Add IPMIv1.5 eratta fixes
|
|
||||||
* Additions to FRU printing and FRU multirecords
|
|
||||||
* Better handling of SDR printing
|
|
||||||
* Contrib scripts for creating rrdtool graphs
|
|
||||||
|
|
||||||
version 1.5.6
|
|
||||||
* Fix SEL event decoding for generic events
|
|
||||||
* Handle empty SEL gracefully when doing "sel list"
|
|
||||||
* Fix sdr handling of sensors that do not return a reading
|
|
||||||
* Fix for CSV display of sensor readings/units from Fredrik Öhrn
|
|
||||||
|
|
||||||
version 1.5.5
|
|
||||||
* Add -U option for setting LAN username
|
|
||||||
* Fix -v usage for plugin interfaces
|
|
||||||
|
|
||||||
version 1.5.4
|
|
||||||
* Put interface plugin API into library
|
|
||||||
* Fix ipmievd
|
|
||||||
|
|
||||||
version 1.5.3
|
|
||||||
* Add -g option to work with grizzly bmc
|
|
||||||
|
|
||||||
version 1.5.2
|
|
||||||
* Add support for setting gratuitous arp interval
|
|
||||||
|
|
||||||
version 1.5.1
|
|
||||||
* Better SEL support
|
|
||||||
* Fix display bug in SDR list
|
|
||||||
|
|
||||||
version 1.5.0
|
|
||||||
* More robust UDP packet handling
|
|
||||||
* Add Intel IMB driver support
|
|
||||||
* Use autoconf/automake/libtool
|
|
||||||
|
|
@ -1,426 +0,0 @@
|
|||||||
dnl
|
|
||||||
dnl autoconf for ipmitool
|
|
||||||
dnl
|
|
||||||
AC_INIT([src/ipmitool.c])
|
|
||||||
AC_CANONICAL_SYSTEM
|
|
||||||
AM_INIT_AUTOMAKE([ipmitool], [1.8.9])
|
|
||||||
AM_CONFIG_HEADER(config.h)
|
|
||||||
AC_CONFIG_SRCDIR([src/ipmitool.c])
|
|
||||||
AC_PREREQ(2.50)
|
|
||||||
AC_SUBST(ac_configure_args)
|
|
||||||
|
|
||||||
dnl check for requirements
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_LN_S
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
AC_CHECK_PROG([RPMBUILD], [rpmbuild], [rpmbuild], [rpm])
|
|
||||||
AC_CHECK_PROG([SED], [sed], [sed])
|
|
||||||
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS([stdlib.h string.h sys/ioctl.h sys/stat.h unistd.h paths.h])
|
|
||||||
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h sys/socket.h])
|
|
||||||
AC_CHECK_HEADERS([sys/byteorder.h byteswap.h])
|
|
||||||
|
|
||||||
AC_C_CONST
|
|
||||||
AC_C_INLINE
|
|
||||||
AC_C_BIGENDIAN
|
|
||||||
|
|
||||||
AC_FUNC_MALLOC
|
|
||||||
AC_FUNC_SELECT_ARGTYPES
|
|
||||||
AC_FUNC_STRTOD
|
|
||||||
AC_CHECK_FUNCS([alarm gethostbyname socket select])
|
|
||||||
AC_CHECK_FUNCS([memmove memset strchr strdup strerror])
|
|
||||||
AC_CHECK_FUNCS([getpassphrase])
|
|
||||||
|
|
||||||
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
||||||
|
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
LIBTOOL="$LIBTOOL --silent"
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS([gethostbyname], [nsl])
|
|
||||||
AC_SEARCH_LIBS([socket], [socket], [],
|
|
||||||
[AC_CHECK_LIB([nsl], [socket],
|
|
||||||
[LIBS="$LIBS -lsocket -lnsl"], [], [-lsocket])])
|
|
||||||
|
|
||||||
if test "x$prefix" = "xNONE"; then
|
|
||||||
prefix="$ac_default_prefix"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$exec_prefix" = "xNONE"; then
|
|
||||||
exec_prefix="$prefix"
|
|
||||||
fi
|
|
||||||
|
|
||||||
enable_all_options=yes
|
|
||||||
|
|
||||||
dnl set some things so we build with GNU tools on Solaris
|
|
||||||
case "$host_os" in
|
|
||||||
solaris*)
|
|
||||||
MAKE=gmake
|
|
||||||
STRIP=gstrip
|
|
||||||
LD=gld
|
|
||||||
AR=gar
|
|
||||||
# openssl libs are in /usr/sfw/lib on solaris 10
|
|
||||||
LIBS="$LIBS -R/usr/sfw/lib"
|
|
||||||
# disable the linux-specific interfaces
|
|
||||||
# and bmc on SPARC (there is no bmc driver for SPARC)
|
|
||||||
if [[ `mach -p` = sparc ]]; then
|
|
||||||
enable_intf_bmc=no
|
|
||||||
else
|
|
||||||
enable_intf_bmc=yes
|
|
||||||
fi
|
|
||||||
enable_intf_imb=no
|
|
||||||
enable_intf_open=no
|
|
||||||
enable_intf_lipmi=no
|
|
||||||
enable_ipmishell=no
|
|
||||||
enable_all_options=no
|
|
||||||
;;
|
|
||||||
*cygwin*)
|
|
||||||
# disable the linux and solaris-specific interfaces
|
|
||||||
enable_intf_imb=no
|
|
||||||
enable_intf_open=no
|
|
||||||
enable_intf_lipmi=no
|
|
||||||
enable_intf_bmc=no
|
|
||||||
enable_ipmishell=no
|
|
||||||
;;
|
|
||||||
*darwin*)
|
|
||||||
# disable the linux and solaris-specific interfaces
|
|
||||||
enable_intf_imb=no
|
|
||||||
enable_intf_open=no
|
|
||||||
enable_intf_lipmi=no
|
|
||||||
enable_intf_bmc=no
|
|
||||||
enable_ipmishell=no
|
|
||||||
;;
|
|
||||||
*freebsd*)
|
|
||||||
enable_intf_imb=no
|
|
||||||
enable_intf_lipmi=no
|
|
||||||
enable_intf_bmc=no
|
|
||||||
;;
|
|
||||||
*netbsd*)
|
|
||||||
enable_intf_imb=no
|
|
||||||
enable_intf_lipmi=no
|
|
||||||
enable_intf_bmc=no
|
|
||||||
enable_intf_open=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_SUBST(ARCH, $host_cpu)
|
|
||||||
AC_SUBST(OS, $host_os)
|
|
||||||
AC_SUBST(PSTAMP, $host)
|
|
||||||
AC_SUBST(BASEDIR, $prefix)
|
|
||||||
|
|
||||||
dnl allow solaris builds to include all options
|
|
||||||
AC_ARG_ENABLE([solaris-opt],
|
|
||||||
[AC_HELP_STRING([--enable-solaris-opt],
|
|
||||||
[enable all options for Solaris [default=no]])],
|
|
||||||
[], [enable_solaris_opt=no])
|
|
||||||
if test "x$enable_all_options" = "xyes" || test "x$enable_solaris_opt" = "xyes"; then
|
|
||||||
AC_DEFINE(ENABLE_ALL_OPTIONS, [1], [Define to 1 to enable all command line options.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl check for OpenSSL functionality
|
|
||||||
AC_ARG_ENABLE([internal-md5],
|
|
||||||
[AC_HELP_STRING([--enable-internal-md5],
|
|
||||||
[enable internal MD5 library [default=no]])],
|
|
||||||
[], [enable_internal_md5=no])
|
|
||||||
|
|
||||||
AC_CHECK_LIB([crypto], [EVP_aes_128_cbc],
|
|
||||||
[if test "x$enable_internal_md5" != "xyes"; then
|
|
||||||
have_crypto=yes; LIBS="$LIBS -lcrypto"
|
|
||||||
fi], [have_crypto=no], [-lcrypto])
|
|
||||||
|
|
||||||
AC_CHECK_LIB([crypto], [MD5_Init],
|
|
||||||
[if test "x$enable_internal_md5" != "xyes"; then
|
|
||||||
if test "x$have_crypto" != "xyes"; then
|
|
||||||
LIBS="$LIBS -lcrypto"
|
|
||||||
have_md5=yes
|
|
||||||
fi
|
|
||||||
AC_DEFINE(HAVE_CRYPTO_MD5, [1], [Define to 1 if libcrypto supports MD5.])
|
|
||||||
fi], [], [-lcrypto])
|
|
||||||
|
|
||||||
AC_CHECK_LIB([crypto], [MD2_Init],
|
|
||||||
[if test "x$enable_internal_md5" != "xyes"; then
|
|
||||||
if test "x$have_crypto" != "xyes" && test "x$have_md5" != "xyes"; then
|
|
||||||
LIBS="$LIBS -lcrypto"
|
|
||||||
have_md2=yes
|
|
||||||
fi
|
|
||||||
AC_DEFINE(HAVE_CRYPTO_MD2, [1], [Define to 1 if libcrypto supports MD2.])
|
|
||||||
fi], [], [-lcrypto])
|
|
||||||
|
|
||||||
dnl enable IPMIv1.5 LAN interface
|
|
||||||
AC_ARG_ENABLE([intf-lan],
|
|
||||||
[AC_HELP_STRING([--enable-intf-lan],
|
|
||||||
[enable IPMIv1.5 LAN interface [default=yes]])],
|
|
||||||
[], [enable_intf_lan=yes])
|
|
||||||
if test "x$enable_intf_lan" = "xstatic" || test "x$enable_intf_lan" = "xplugin"; then
|
|
||||||
enable_intf_lan=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_lan" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_LAN, [1], [Define to 1 to enable LAN IPMIv1.5 interface.])
|
|
||||||
AC_SUBST(INTF_LAN, [lan])
|
|
||||||
AC_SUBST(INTF_LAN_LIB, [libintf_lan.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB lan/libintf_lan.la"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl enable IPMIv2.0 RMCP+ LAN interface
|
|
||||||
AC_ARG_ENABLE([intf-lanplus],
|
|
||||||
[AC_HELP_STRING([--enable-intf-lanplus],
|
|
||||||
[enable IPMIv2.0 RMCP+ LAN interface [default=auto]])],
|
|
||||||
[if test "x$enable_intf_lanplus" != "xno" && test "x$have_crypto" != "xyes"; then
|
|
||||||
echo "** The lanplus interface requires an SSL library with EVP_aes_128_cbc defined."
|
|
||||||
enable_intf_lanplus=no
|
|
||||||
fi],
|
|
||||||
[enable_intf_lanplus=$have_crypto])
|
|
||||||
if test "x$enable_intf_lanplus" = "xstatic" || test "x$enable_intf_lanplus" = "xplugin"; then
|
|
||||||
enable_intf_lanplus=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_lanplus" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_LANPLUS, [1], [Define to 1 to enable LAN+ IPMIv2 interface.])
|
|
||||||
AC_SUBST(INTF_LANPLUS, [lanplus])
|
|
||||||
AC_SUBST(INTF_LANPLUS_LIB, [libintf_lanplus.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB lanplus/libintf_lanplus.la"
|
|
||||||
else
|
|
||||||
enable_intf_lanplus=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
ORIG_CPPFLAGS=$CPPFLAGS
|
|
||||||
|
|
||||||
dnl look for OpenIPMI header files
|
|
||||||
AC_ARG_WITH([kerneldir],
|
|
||||||
[AC_HELP_STRING([--with-kerneldir=DIR],
|
|
||||||
[set kernel include path to DIR])],
|
|
||||||
[if test "x$with_kerneldir" = "xyes"; then
|
|
||||||
with_kerneldir="/lib/modules/`uname -r`/build"
|
|
||||||
fi
|
|
||||||
CFLAGS="$CFLAGS -I ${with_kerneldir}/include"
|
|
||||||
AC_SUBST(CFLAGS)
|
|
||||||
CPPFLAGS="$CPPFLAGS -I ${with_kerneldir}/include"
|
|
||||||
AC_SUBST(CPPFLAGS)
|
|
||||||
if test -s ${with_kerneldir}/include/linux/version.h ; then
|
|
||||||
kernelver=`grep UTS_RELEASE ${with_kerneldir}/include/linux/version.h | \
|
|
||||||
sed 's/^\#define UTS_RELEASE \"\(2\.[0-9]\)\..*/\1/'`
|
|
||||||
if test "x$kernelver" = "x2.6"; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -D__user="
|
|
||||||
AC_SUBST(CPPFLAGS)
|
|
||||||
fi
|
|
||||||
fi])
|
|
||||||
|
|
||||||
AH_TEMPLATE([HAVE_LINUX_COMPILER_H], [])
|
|
||||||
AC_MSG_CHECKING([for linux/compiler.h])
|
|
||||||
AC_PREPROC_IFELSE([#include <linux/compiler.h>],
|
|
||||||
[AC_DEFINE(HAVE_LINUX_COMPILER_H, [1],
|
|
||||||
[Define to 1 if you have the <linux/compiler.h> header file.])
|
|
||||||
AC_MSG_RESULT([yes])],
|
|
||||||
[AC_MSG_RESULT([no])])
|
|
||||||
|
|
||||||
CPPFLAGS=$ORIG_CPPFLAGS
|
|
||||||
AC_SUBST(CPPFLAGS)
|
|
||||||
|
|
||||||
AC_CHECK_HEADER([linux/ipmi.h],
|
|
||||||
[AC_DEFINE(HAVE_OPENIPMI_H, [1],
|
|
||||||
[Define to 1 if you have the <linux/ipmi.h> header file.])],
|
|
||||||
[AC_CHECK_HEADER([sys/ipmi.h],
|
|
||||||
[AC_DEFINE(HAVE_FREEBSD_IPMI_H, [1],
|
|
||||||
[Define to 1 if you have the <sys/ipmi.h> header file.])],
|
|
||||||
[echo "** Unable to find OpenIPMI header files. Using internal version."])])
|
|
||||||
|
|
||||||
dnl look for FreeIPMI files
|
|
||||||
AC_CHECK_LIB(freeipmi, ipmi_open_inband, [have_free=yes], [have_free=no])
|
|
||||||
AC_ARG_ENABLE([intf-free],
|
|
||||||
[AC_HELP_STRING([--enable-intf-free],
|
|
||||||
[enable FreeIPMI IPMI interface [default=auto]])],
|
|
||||||
[if test "x$enable_intf_free" != "xno" && test "x$have_free" != "xyes"; then
|
|
||||||
echo "** Unable to build FreeIPMI interface support!"
|
|
||||||
enable_intf_free=no
|
|
||||||
fi],
|
|
||||||
[enable_intf_free=$have_free])
|
|
||||||
if test "x$enable_intf_free" = "xstatic" || test "x$enable_intf_free" = "xplugin"; then
|
|
||||||
enable_intf_free=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_free" = "xyes"; then
|
|
||||||
dnl Determine if you got the right FreeIPMI version
|
|
||||||
AC_MSG_CHECKING([for good libfreeipmi version])
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#include <sys/types.h> /* For size_t */
|
|
||||||
#include <stdio.h> /* For NULL */
|
|
||||||
#include <freeipmi/freeipmi.h>
|
|
||||||
#include <freeipmi/udm/ipmi-udm.h>
|
|
||||||
], [
|
|
||||||
ipmi_device_t dev;
|
|
||||||
dev = ipmi_open_inband(IPMI_DEVICE_KCS,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
NULL,
|
|
||||||
0);
|
|
||||||
], ac_free_version_good=yes,ac_free_version_good=no)
|
|
||||||
AC_MSG_RESULT($ac_free_version_good)
|
|
||||||
if test "x$ac_free_version_good" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_FREE, [1], [Define to 1 to enable FreeIPMI interface.])
|
|
||||||
AC_SUBST(INTF_FREE, [free])
|
|
||||||
AC_SUBST(INTF_FREE_LIB, [libintf_free.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB free/libintf_free.la"
|
|
||||||
else
|
|
||||||
enable_intf_free=no
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl look for termios header file
|
|
||||||
AC_CHECK_HEADER([termios.h],
|
|
||||||
[AC_DEFINE(HAVE_TERMIOS_H, [1], [Define to 1 if you have <termios.h>.])],
|
|
||||||
[AC_CHECK_HEADER([sys/termios.h],
|
|
||||||
[AC_DEFINE(HAVE_SYS_TERMIOS_H, [1], [Define to 1 if you have <sys/termios.h>.])],
|
|
||||||
[echo "** Unable to find termios header file."])])
|
|
||||||
|
|
||||||
dnl set RPM distro tag for use in RPM name
|
|
||||||
AC_ARG_WITH([rpm-distro],
|
|
||||||
[AC_HELP_STRING([--with-rpm-distro=DISTRO],
|
|
||||||
[set Linux distribution tag for use in RPM version string])],
|
|
||||||
[AC_SUBST(DISTRO, $with_rpm_distro)])
|
|
||||||
|
|
||||||
dnl set RPM release tag
|
|
||||||
AC_ARG_WITH([rpm-release],
|
|
||||||
[AC_HELP_STRING([--with-rpm-release=RELEASE],
|
|
||||||
[set release number for RPM release field])],
|
|
||||||
[], [with_rpm_release=1])
|
|
||||||
AC_SUBST(RPM_RELEASE, $with_rpm_release)
|
|
||||||
|
|
||||||
dnl enable Linux OpenIPMI interface
|
|
||||||
AC_ARG_ENABLE([intf-open],
|
|
||||||
[AC_HELP_STRING([--enable-intf-open],
|
|
||||||
[enable Linux OpenIPMI interface [default=auto]])],
|
|
||||||
[], [enable_intf_open=yes])
|
|
||||||
if test "x$enable_intf_open" = "xstatic" || test "x$enable_intf_open" = "xplugin"; then
|
|
||||||
enable_intf_open=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_open" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_OPEN, [1], [Define to 1 to enable Linux OpenIPMI interface.])
|
|
||||||
AC_SUBST(INTF_OPEN, [open])
|
|
||||||
AC_SUBST(INTF_OPEN_LIB, [libintf_open.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB open/libintf_open.la"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl enable Intel IMB interface
|
|
||||||
AC_ARG_ENABLE([intf-imb],
|
|
||||||
[AC_HELP_STRING([--enable-intf-imb],
|
|
||||||
[enable Intel IMB driver interface [default=auto]])],
|
|
||||||
[], [enable_intf_imb=yes])
|
|
||||||
if test "x$enable_intf_imb" = "xstatic" || test "x$enable_intf_imb" = "xplugin"; then
|
|
||||||
enable_intf_imb=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_imb" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_IMB, [1], [Define to 1 to enable Intel IMB interface.])
|
|
||||||
AC_SUBST(INTF_IMB, [imb])
|
|
||||||
AC_SUBST(INTF_IMB_LIB, [libintf_imb.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB imb/libintf_imb.la"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl enable Solaris LIPMI interface
|
|
||||||
AC_CHECK_HEADER([sys/lipmi/lipmi_intf.h], [have_lipmi=yes], [have_lipmi=no])
|
|
||||||
AC_ARG_ENABLE([intf-lipmi],
|
|
||||||
[AC_HELP_STRING([--enable-intf-lipmi],
|
|
||||||
[enable Solaris 9 x86 IPMI interface [default=no]])],
|
|
||||||
[if test "x$enable_intf_lipmi" != "xno" && test "x$have_lipmi" != "xyes"; then
|
|
||||||
echo "** Unable to build Solaris 9 x86 IPMI interface support!"
|
|
||||||
enable_intf_lipmi=no
|
|
||||||
fi],
|
|
||||||
[enable_intf_lipmi=no])
|
|
||||||
if test "x$enable_intf_lipmi" = "xstatic" || test "x$enable_intf_lipmi" = "xplugin"; then
|
|
||||||
enable_intf_lipmi=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_lipmi" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_LIPMI, [1], [Define to 1 to enable Solaris 9 LIPMI interface.])
|
|
||||||
AC_SUBST(INTF_LIPMI, [lipmi])
|
|
||||||
AC_SUBST(INTF_LIPMI_LIB, [libintf_lipmi.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB lipmi/libintf_lipmi.la"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl enable Solaris BMC interface
|
|
||||||
AC_ARG_ENABLE([intf-bmc],
|
|
||||||
[AC_HELP_STRING([--enable-intf-bmc],
|
|
||||||
[enable Solaris 10 x86 IPMI interface [default=auto]])],,
|
|
||||||
[enable_intf_bmc=no])
|
|
||||||
if test "x$enable_intf_bmc" = "xstatic" || test "x$enable_intf_bmc" = "xplugin"; then
|
|
||||||
enable_intf_bmc=yes
|
|
||||||
fi
|
|
||||||
if test "x$enable_intf_bmc" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_BMC, [1], [Define to 1 to enable Solaris 10 BMC interface.])
|
|
||||||
AC_SUBST(INTF_BMC, [bmc])
|
|
||||||
AC_SUBST(INTF_BMC_LIB, [libintf_bmc.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB bmc/libintf_bmc.la"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(IPMITOOL_INTF_LIB)
|
|
||||||
|
|
||||||
dnl check for readline library to enable ipmi shell
|
|
||||||
AC_ARG_ENABLE([ipmishell],
|
|
||||||
[AC_HELP_STRING([--enable-ipmishell],
|
|
||||||
[enable IPMI shell interface [default=yes]])],
|
|
||||||
[], [enable_ipmishell=yes])
|
|
||||||
if test "x$enable_ipmishell" = "xyes"; then
|
|
||||||
AC_SEARCH_LIBS([tgetent], [tinfo ncurses curses readline termcap])
|
|
||||||
AC_SEARCH_LIBS([initscr], [ncurses curses], [have_curses=yes])
|
|
||||||
AC_SEARCH_LIBS([readline], [readline edit], [have_readline=yes])
|
|
||||||
if test "x$have_curses" = "xyes" && test "x$have_readline" = "xyes"; then
|
|
||||||
AC_DEFINE(HAVE_READLINE, [1], [Define to 1 if readline present.])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Enable -Wall -Werror
|
|
||||||
AC_ARG_ENABLE([buildcheck],
|
|
||||||
[AC_HELP_STRING([--enable-buildcheck],
|
|
||||||
[enable -Wall -Werror for build testing [default=no]])],
|
|
||||||
[if test "x$enable_buildcheck" != "xno"; then
|
|
||||||
CFLAGS="$CFLAGS -Wall -Werror -Wpointer-arith -Wstrict-prototypes"
|
|
||||||
fi], [])
|
|
||||||
|
|
||||||
AC_SUBST(CFLAGS)
|
|
||||||
|
|
||||||
dnl Enable extra file security paranoia
|
|
||||||
AC_ARG_ENABLE([file-security],
|
|
||||||
[AC_HELP_STRING([--enable-file-security],
|
|
||||||
[enable extra security checks on files opened for read [default=no]])],
|
|
||||||
[if test "x$enable_file_security" != "xno"; then
|
|
||||||
AC_DEFINE(ENABLE_FILE_SECURITY, [1], [Define to 1 for extra file security.])
|
|
||||||
fi], [])
|
|
||||||
|
|
||||||
dnl Generate files for build
|
|
||||||
AC_CONFIG_FILES([Makefile
|
|
||||||
doc/Makefile
|
|
||||||
contrib/Makefile
|
|
||||||
control/Makefile
|
|
||||||
control/pkginfo
|
|
||||||
control/prototype
|
|
||||||
control/rpmmacros
|
|
||||||
control/ipmitool.spec
|
|
||||||
lib/Makefile
|
|
||||||
include/Makefile
|
|
||||||
include/ipmitool/Makefile
|
|
||||||
src/Makefile
|
|
||||||
src/plugins/Makefile
|
|
||||||
src/plugins/lan/Makefile
|
|
||||||
src/plugins/lanplus/Makefile
|
|
||||||
src/plugins/open/Makefile
|
|
||||||
src/plugins/free/Makefile
|
|
||||||
src/plugins/imb/Makefile
|
|
||||||
src/plugins/bmc/Makefile
|
|
||||||
src/plugins/lipmi/Makefile])
|
|
||||||
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
AC_MSG_RESULT([])
|
|
||||||
AC_MSG_RESULT([ipmitool $VERSION])
|
|
||||||
AC_MSG_RESULT([])
|
|
||||||
AC_MSG_RESULT([Interfaces])
|
|
||||||
AC_MSG_RESULT([ lan : $enable_intf_lan])
|
|
||||||
AC_MSG_RESULT([ lanplus : $enable_intf_lanplus])
|
|
||||||
AC_MSG_RESULT([ open : $enable_intf_open])
|
|
||||||
AC_MSG_RESULT([ free : $enable_intf_free])
|
|
||||||
AC_MSG_RESULT([ imb : $enable_intf_imb])
|
|
||||||
AC_MSG_RESULT([ bmc : $enable_intf_bmc])
|
|
||||||
AC_MSG_RESULT([ lipmi : $enable_intf_lipmi])
|
|
||||||
AC_MSG_RESULT([])
|
|
||||||
AC_MSG_RESULT([Extra tools])
|
|
||||||
AC_MSG_RESULT([ ipmievd : yes])
|
|
||||||
AC_MSG_RESULT([])
|
|
||||||
|
|
@ -1,282 +0,0 @@
|
|||||||
Name: ipmitool
|
|
||||||
Summary: ipmitool - Utility for IPMI control
|
|
||||||
Version: @VERSION@
|
|
||||||
Release: @RPM_RELEASE@%{?_distro:.%{_distro}}
|
|
||||||
License: BSD
|
|
||||||
Group: Utilities
|
|
||||||
Packager: Duncan Laurie <duncan@iceblink.org>
|
|
||||||
Source: %{name}-%{version}.tar.gz
|
|
||||||
Buildroot: /var/tmp/ipmitool-root
|
|
||||||
|
|
||||||
%description
|
|
||||||
This package contains a utility for interfacing with devices that support
|
|
||||||
the Intelligent Platform Management Interface specification. IPMI is
|
|
||||||
an open standard for machine health, inventory, and remote power control.
|
|
||||||
|
|
||||||
This utility can communicate with IPMI-enabled devices through either a
|
|
||||||
kernel driver such as OpenIPMI or over the RMCP LAN protocol defined in
|
|
||||||
the IPMI specification. IPMIv2 adds support for encrypted LAN
|
|
||||||
communications and remote Serial-over-LAN functionality.
|
|
||||||
|
|
||||||
It provides commands for reading the Sensor Data Repository (SDR) and
|
|
||||||
displaying sensor values, displaying the contents of the System Event
|
|
||||||
Log (SEL), printing Field Replaceable Unit (FRU) information, reading and
|
|
||||||
setting LAN configuration, and chassis power control.
|
|
||||||
|
|
||||||
%prep
|
|
||||||
if [ "$RPM_BUILD_ROOT" ] && [ "$RPM_BUILD_ROOT" != "/" ]; then
|
|
||||||
rm -rf $RPM_BUILD_ROOT
|
|
||||||
fi
|
|
||||||
|
|
||||||
%setup
|
|
||||||
|
|
||||||
%build
|
|
||||||
./configure --with-kerneldir \
|
|
||||||
--with-rpm-distro=@DISTRO@ \
|
|
||||||
--prefix=%{_prefix} \
|
|
||||||
--bindir=%{_bindir} \
|
|
||||||
--sbindir=%{_sbindir} \
|
|
||||||
--datadir=%{_datadir} \
|
|
||||||
--includedir=%{_includedir} \
|
|
||||||
--libdir=%{_libdir} \
|
|
||||||
--mandir=%{_mandir} \
|
|
||||||
--sysconfdir=%{_sysconfdir}
|
|
||||||
make
|
|
||||||
|
|
||||||
%install
|
|
||||||
make DESTDIR=$RPM_BUILD_ROOT install-strip
|
|
||||||
|
|
||||||
%clean
|
|
||||||
if [ "$RPM_BUILD_ROOT" ] && [ "$RPM_BUILD_ROOT" != "/" ]; then
|
|
||||||
rm -rf $RPM_BUILD_ROOT
|
|
||||||
fi
|
|
||||||
|
|
||||||
%files
|
|
||||||
%defattr(755,root,root)
|
|
||||||
%attr(755,root,root) %{_bindir}/*
|
|
||||||
%attr(755,root,root) %{_sbindir}/*
|
|
||||||
%{_mandir}/man*/*
|
|
||||||
%doc %{_datadir}/doc/ipmitool
|
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
* Tue Mar 6 2007 <pere@hungry.com> 1.8.9-1
|
|
||||||
- Added initial AMC ekey query operation support
|
|
||||||
- Improvements to ekeying support (PICMG 3.x only)
|
|
||||||
- Added initial interactive edition support for multirec; added IANA
|
|
||||||
verification before interpreting PICMG records.
|
|
||||||
- Added edit support for AMC activation "Maximum Internal Current"
|
|
||||||
- Fix bug generating garbage on the screen when handling GetDeviceId
|
|
||||||
and sol traffic occurs
|
|
||||||
- Added ability to map OEM sensor types to OEM description string using
|
|
||||||
IANA number; moved IANA number table
|
|
||||||
- Fix lan set access command to use value already saved within parameters
|
|
||||||
for PEF and authentication
|
|
||||||
- Fix bug in cmd ipmitool lan stats get 1
|
|
||||||
- Add support to allow ipmitool/ipmievd to target specific device nodes
|
|
||||||
on multi-BMC systems
|
|
||||||
- Add support for name+privilege lookup for lanplus sessions
|
|
||||||
- Fix time_t conversion bug for 64-bit OS
|
|
||||||
- Added prefix of hostname on sel ipmievd sessions
|
|
||||||
- Fixed FWUM Get Info
|
|
||||||
- Fix ipmievd fd closing bug
|
|
||||||
- Add set-in-progress flag support to chassis bootdev
|
|
||||||
- Added new chassis bootdev options
|
|
||||||
- Add sol payload enable/disable comman
|
|
||||||
- Fix SOL set errors when commit-write not supported
|
|
||||||
- Fix reset of session timeout for lanplus interface
|
|
||||||
- Fixed lan interface accessibility timeout handling
|
|
||||||
- Fix bug with Function Get Channel Cipher Suites command when more
|
|
||||||
than 1 page used.
|
|
||||||
- Fix missing firmware firewall top-level command
|
|
||||||
- Fix bug in SOL keepalive functionality
|
|
||||||
- Fix SOLv2 NACK and retry handling for Intel ESB2 BMC
|
|
||||||
- Added ipmi_sel_get_oem_sensor* APIs
|
|
||||||
- Added HPM.1 support
|
|
||||||
- Fix segfault when incorrect oem option supplied
|
|
||||||
- Fix bus problem with spd command
|
|
||||||
- Fix segfault in SOL when remote BMC does not return packet
|
|
||||||
- Adjust packet length for AMC.0 retricting IPMB packets to 32 bytes
|
|
||||||
- Added lan packet size reduction mechanism
|
|
||||||
- Fix bug with sendMessage of bad length with different target
|
|
||||||
- Fix for big endian (PPC) architecture
|
|
||||||
- NetBSD fixes
|
|
||||||
- Fix segfault and channel problem with user priv command
|
|
||||||
- Add support for bus/chan on i2c raw command
|
|
||||||
- Add freeipmi interface support
|
|
||||||
- Add remote spd printing
|
|
||||||
- Add better detection of linux/compiler.h to config
|
|
||||||
- Makefile changes to fix makedistcheck, etc.
|
|
||||||
|
|
||||||
* Tue May 02 2006 <duncan@iceblink.org> 1.8.8-1
|
|
||||||
- Fix segfaults in sensor data repository list
|
|
||||||
- Fix ipmievd to open interface before daemonizing
|
|
||||||
- Fix IPMIv1.5 authtype NONE to ignore supplied password
|
|
||||||
- Fix cipher suite display bug in lan print
|
|
||||||
- Fix typo in IPMIv2 SOL output when sending break
|
|
||||||
- Fix improper LUN handling with Tyan SOL
|
|
||||||
- Add LUN support to OpenIPMI interface
|
|
||||||
- Add support for Kontron OEM commands
|
|
||||||
- Update to Kontron Firmware Update command
|
|
||||||
|
|
||||||
* Sun Mar 19 2006 <duncan@iceblink.org> 1.8.7-1
|
|
||||||
- Add Sun OEM command for blades
|
|
||||||
- Increase argument size for raw commands in shell/exec
|
|
||||||
- Fix handling of LUNs for LAN interfaces
|
|
||||||
- Add IPMIv2 SOL loopback test
|
|
||||||
- Add support for IBM OEM SEL messages
|
|
||||||
- Disable file paranoia checks on read files by default
|
|
||||||
- Support IPMIv2 SOL on older Intel boxes
|
|
||||||
- Display message and exit if keepalive fails during SOL
|
|
||||||
- Add support for setting VLAN id and priority
|
|
||||||
- Add support for FreeBSD OpenIPMI-compatible driver
|
|
||||||
- Add support for IPMIv2 Firmware Firewall
|
|
||||||
- Fix gcc4 compile warnings
|
|
||||||
- Make ipmievd generate pidfile
|
|
||||||
- Add initscripts for ipmievd
|
|
||||||
|
|
||||||
* Mon Jan 17 2006 <duncan@iceblink.org> 1.8.6-1
|
|
||||||
- Fix memory corruption when sending encrypted SOL traffic
|
|
||||||
- Add keepalive timer to IPMIv2 SOL sessions
|
|
||||||
|
|
||||||
* Sat Jan 14 2006 <duncan@iceblink.org> 1.8.5-1
|
|
||||||
- Raise privilege level after creating IPMIv2 session
|
|
||||||
- Add support for settable SOL escape character with -e option
|
|
||||||
- Add support for Kg BMC key for IPMIv2 authentication with -k option
|
|
||||||
- Add support for Tyan IPMIv1.5 SOL with tsol command
|
|
||||||
- Add support for PICMG devices
|
|
||||||
- Add support for OEM SEL event parsing
|
|
||||||
- Add support for command bridging over lan and lanplus interfaces
|
|
||||||
- New 'chassis selftest' command
|
|
||||||
- Many bufxies and patches from contributors
|
|
||||||
|
|
||||||
* Wed May 18 2005 <duncan@iceblink.org> 1.8.2-1
|
|
||||||
- Fix FRU reading for large (>255 bytes) areas.
|
|
||||||
- Overhaul to ipmievd to support SEL polling in addition to OpenIPMI.
|
|
||||||
- Fix LAN parameter segfault when no Ciphers supported by BMC.
|
|
||||||
- Fix IPMIv2 support on Intel v2 BMCs (use -o intelplus).
|
|
||||||
- Separate option parsing code from main ipmitool source file.
|
|
||||||
- Add raw I2C support with IPMI Master Read-Write command.
|
|
||||||
- Add support for new 'sdr elist' extended output format.
|
|
||||||
- Add support for listing sensors by type with 'sdr type' command.
|
|
||||||
- Add support for new 'sel elist' extended output format that
|
|
||||||
cross-references events with sensors.
|
|
||||||
- Add support for sending dynamically generated platform events
|
|
||||||
based on existing sensor information.
|
|
||||||
- New '-S' argument to read local SDR cache created with 'sdr dump'.
|
|
||||||
- Updated manpage for ipmitool and ipmievd.
|
|
||||||
|
|
||||||
* Wed Apr 06 2005 <duncan@iceblink.org> 1.8.1-1
|
|
||||||
- Install ipmievd into /usr/sbin
|
|
||||||
|
|
||||||
* Wed Mar 16 2005 <duncan@iceblink.org> 1.8.0-1
|
|
||||||
- Fix IPMIv2.0 issues
|
|
||||||
- Fix chassis boot parameter support
|
|
||||||
- Add support for linear sensors
|
|
||||||
- Update bmc plugin to work with new Solaris bmc driver (new ioctl
|
|
||||||
for interface detection and new STREAMS message-based interface)
|
|
||||||
|
|
||||||
* Tue Jan 18 2005 <duncan@iceblink.org> 1.7.0-1
|
|
||||||
- Propogate errors correctly so exit status will be useful
|
|
||||||
- More consistent display of errors including completion code text
|
|
||||||
- Errors and debug is send to stderr now
|
|
||||||
- New "sel get" command that will print details about SEL entry
|
|
||||||
and corresponding SDR records as well as FRUs via entity association
|
|
||||||
- Improved event generator, now supports reading events from text file
|
|
||||||
- New "-o oemtype" option for specifying OEM boards
|
|
||||||
exsting types are "supermicro" and "intelwv2"
|
|
||||||
- New PEF subsystem from Tim Murphy at Dell
|
|
||||||
- New "bmc" plugin for Solaris 10 x86
|
|
||||||
- Many bugfixes and contributed patches
|
|
||||||
- Support for Supermicro BMC OEM authentication method
|
|
||||||
- Fix minor problem with LAN parameter setting
|
|
||||||
|
|
||||||
* Wed Aug 18 2004 <duncan@iceblink.org> 1.6.0-1
|
|
||||||
- Add a README
|
|
||||||
- Add support for IPMIv2 and Serial-over-LAN from Newisys
|
|
||||||
- Add Solaris x86 lipmi interface
|
|
||||||
- Add support for building Solaris packages
|
|
||||||
- Add support for building RPMs as non-root user
|
|
||||||
- Fix segfault when doing "sel list" (from Matthew Braithwaite)
|
|
||||||
- Fix "chassis identify" on some BMCs (from ebrower@sourceforge)
|
|
||||||
- Add "bmc info" and related output (from ebrower@sourceforge)
|
|
||||||
- new "shell" and "exec" commands
|
|
||||||
- lots of other contributed patches
|
|
||||||
|
|
||||||
* Sat May 27 2004 <duncan@iceblink.org> 1.5.9-1
|
|
||||||
- Add ability to get a particular sensor by name
|
|
||||||
- Add ability to set a particular sensor threshold
|
|
||||||
- Add support for displaying V2 channel authentication levels
|
|
||||||
- Add README for rrdtool scripts in contrib directory
|
|
||||||
- Improve lan interface retry handling
|
|
||||||
- Support prompting for password or reading from environment
|
|
||||||
- Move chaninfo command into channel subcommand
|
|
||||||
- Fix reservation ID handling when two sessions open to BMC
|
|
||||||
- Fix reading of large FRU data
|
|
||||||
- Add configure option for changing binary to ipmiadm for Solaris
|
|
||||||
- Fix compile problem on Solaris 8
|
|
||||||
|
|
||||||
* Tue Jan 27 2004 <duncan@iceblink.org> 1.5.8-1
|
|
||||||
- Enable static compilation of interfaces
|
|
||||||
- Fix types to be 64-bit safe
|
|
||||||
- Fix compilation problems on Solaris
|
|
||||||
- Fix multiple big-endian problems for Solaris/SPARC
|
|
||||||
- Fix channel access to save settings to NVRAM
|
|
||||||
- Set channel privilege limit to ADMIN during "access on"
|
|
||||||
- Enable gratuitous ARP in bmcautoconf.sh
|
|
||||||
- Add support for Linux kernel panic messages in SEL output
|
|
||||||
- Add support for type 3 SDR records
|
|
||||||
|
|
||||||
* Mon Jan 5 2004 <duncan@iceblink.org> 1.5.7-1
|
|
||||||
- add IPMIv1.5 eratta fixes
|
|
||||||
- additions to FRU printing and FRU multirecords
|
|
||||||
- better handling of SDR printing
|
|
||||||
- contrib scripts for creating rrdtool graphs
|
|
||||||
|
|
||||||
* Thu Dec 4 2003 <duncan@iceblink.org> 1.5.6-1
|
|
||||||
- Fix SEL event decoding for generic events
|
|
||||||
- Handle empty SEL gracefully when doing "sel list"
|
|
||||||
- Fix sdr handling of sensors that do not return a reading
|
|
||||||
- Fix for CSV display of sensor readings/units from Fredrik Öhrn
|
|
||||||
|
|
||||||
* Tue Nov 25 2003 <duncan@iceblink.org> 1.5.5-1
|
|
||||||
- Add -U option for setting LAN username
|
|
||||||
- Fix -v usage for plugin interfaces
|
|
||||||
|
|
||||||
* Fri Nov 14 2003 <duncan@iceblink.org> 1.5.4-1
|
|
||||||
- pull interface plugin api into library
|
|
||||||
- fix ipmievd
|
|
||||||
|
|
||||||
* Fri Oct 31 2003 <duncan@iceblink.org> 1.5.3-1
|
|
||||||
- add -g optin for pedantic ipmi-over-lan communication
|
|
||||||
|
|
||||||
* Fri Oct 24 2003 <duncan@iceblink.org> 1.5.2-1
|
|
||||||
- add gratuitous arp interval setting
|
|
||||||
|
|
||||||
* Wed Oct 8 2003 <duncan@iceblink.org> 1.5.1-1
|
|
||||||
- better SEL support
|
|
||||||
- fix display bug in SDR list
|
|
||||||
|
|
||||||
* Fri Sep 5 2003 <duncan@iceblink.org> 1.5.0-1
|
|
||||||
- use automake/autoconf/libtool
|
|
||||||
- dynamic loading interface plugins
|
|
||||||
|
|
||||||
* Wed May 28 2003 <duncan@iceblink.org> 1.4.0-1
|
|
||||||
- make UDP packet handling more robust
|
|
||||||
- fix imb driver support
|
|
||||||
|
|
||||||
* Thu May 22 2003 <duncan@iceblink.org> 1.3-1
|
|
||||||
- update manpage
|
|
||||||
- rework of low-level network handling
|
|
||||||
- add basic imb driver support
|
|
||||||
|
|
||||||
* Wed Apr 2 2003 <duncan@iceblink.org> 1.2-1
|
|
||||||
- change command line option parsing
|
|
||||||
- support for more chassis commands
|
|
||||||
|
|
||||||
* Tue Apr 1 2003 <duncan@iceblink.org> 1.1-1
|
|
||||||
- minor fixes.
|
|
||||||
|
|
||||||
* Sun Mar 30 2003 <duncan@iceblink.org> 1.0-1
|
|
||||||
- Initial release.
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
%_topdir %(echo $BUILDDIR)
|
|
||||||
%_sourcedir %{_topdir}/..
|
|
||||||
%_specdir %{_sourcedir}
|
|
||||||
%_tmppath %{_topdir}/tmp
|
|
||||||
%_builddir %{_topdir}/BUILD
|
|
||||||
%_buildroot %{_topdir}/%{_tmppath}/%{name}-%{version}-root
|
|
||||||
%_rpmdir %{_topdir}/RPMS
|
|
||||||
%_srcrpmdir %{_topdir}/SRPMS
|
|
||||||
%_distro @DISTRO@
|
|
||||||
%_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
|
|
||||||
%packager duncan@iceblink.org
|
|
||||||
%distribution Sourceforge Build
|
|
@ -1,8 +0,0 @@
|
|||||||
macrofiles: /usr/lib/rpm/macros:/usr/lib/rpm/%{_target}/macros:/etc/rpm/macros.specspo:/etc/rpm/macros:/etc/rpm/%{_target}/macros:%(echo $CONFIGDIR)/rpmmacros
|
|
||||||
|
|
||||||
buildarchtranslate: athlon: i386
|
|
||||||
buildarchtranslate: i686: i386
|
|
||||||
buildarchtranslate: i586: i386
|
|
||||||
buildarchtranslate: i486: i386
|
|
||||||
buildarchtranslate: i386: i386
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
|||||||
For more information about setting up your Debian system with IPMI
|
|
||||||
please see the excellent howto by Tim Small:
|
|
||||||
|
|
||||||
http://buttersideup.com/docs/howto/IPMI_on_Debian.html
|
|
||||||
|
|
@ -1,266 +0,0 @@
|
|||||||
ipmitool (1.8.7-2) unstable; urgency=low
|
|
||||||
|
|
||||||
* Fix typo in init.d/ipmievd. (Closes: #361309)
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Sat, 8 Apr 2006 06:44:31 +0200
|
|
||||||
|
|
||||||
ipmitool (1.8.7-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* New upstream version.
|
|
||||||
- Dropped nuclear clause from the copyright. Updated debian/copyright
|
|
||||||
to reflect this.
|
|
||||||
- ipmievd now store pid in /var/run/ipmievd.pid. Adjust init.d
|
|
||||||
script to use it.
|
|
||||||
* Rename /etc/default/ipmievd variable IPMIEVD_OPTS is renamed to
|
|
||||||
IPMIEVD_OPTIONS to stay compatible with upstream and other
|
|
||||||
distributions. Add backwards compatibility code with a warning to
|
|
||||||
the users of the old variable.
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Sun, 26 Mar 2006 21:11:08 +0200
|
|
||||||
|
|
||||||
ipmitool (1.8.6-2) unstable; urgency=low
|
|
||||||
|
|
||||||
* Add ia64 as an supported arch. (Closes: #355930)
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Fri, 10 Mar 2006 23:34:50 +0100
|
|
||||||
|
|
||||||
ipmitool (1.8.6-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* New upstream version.
|
|
||||||
- Avoid crashing when setting lan IP address. (Closes: #351205)
|
|
||||||
* Avoid changing history by reverding upstream change
|
|
||||||
to email addresses in debian/changelog.
|
|
||||||
* Correct typo in control file: Suggest -> Suggests. Thanks
|
|
||||||
to Philipp Matthias Hahn for the report.
|
|
||||||
* Add init.d/ipmievd script. Based on script from Elmar Hoffmann,
|
|
||||||
slightly modified to use lsb-base functions. Added dependency on
|
|
||||||
lsb-base. (Closes: #345994)
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Sun, 26 Feb 2006 10:31:14 +0100
|
|
||||||
|
|
||||||
ipmitool (1.8.2-2) unstable; urgency=low
|
|
||||||
|
|
||||||
* Add build-dependency on 'libreadline5-dev | libreadline-dev' to make
|
|
||||||
sure all archs get readline support. (Closes: #326341)
|
|
||||||
* Add build-dependency on libssl-dev to enable SSL support on
|
|
||||||
all archs.
|
|
||||||
* Updated Standards-Version to 3.6.2.1. (No updates required)
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Sat, 3 Sep 2005 19:18:51 +0200
|
|
||||||
|
|
||||||
ipmitool (1.8.2-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* New upstream release.
|
|
||||||
- Fix FRU reading for large (>255 bytes) areas.
|
|
||||||
- Overhaul to ipmievd to support SEL polling in addition to OpenIPMI.
|
|
||||||
- Fix LAN parameter segfault when no Ciphers supported by
|
|
||||||
BMC. (Closes: #306806)
|
|
||||||
- Fix IPMIv2 support on Intel v2 BMCs (use -o intelplus).
|
|
||||||
- Separate option parsing code from main ipmitool source file.
|
|
||||||
- Add raw I2C support with IPMI Master Read-Write command.
|
|
||||||
- Add support for new 'sdr elist' extended output format.
|
|
||||||
- Add support for listing sensors by type with 'sdr type' command.
|
|
||||||
- Add support for new 'sel elist' extended output format that
|
|
||||||
cross-references events with sensors.
|
|
||||||
- Add support for sending dynamically generated platform events
|
|
||||||
based on existing sensor information.
|
|
||||||
- New '-S' argument to read local SDR cache created with 'sdr dump'.
|
|
||||||
- Updated manpage for ipmitool and ipmievd. (Closes: #306894)
|
|
||||||
* Correct the upstream URL in debian/changelog to the current one.
|
|
||||||
* Suggest package openipmi. (Closes: #305629)
|
|
||||||
* Add debian/watch file to detect new source versions.
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Sun, 5 Jun 2005 10:29:18 +0200
|
|
||||||
|
|
||||||
ipmitool (1.8.1-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* New upstream release.
|
|
||||||
* Install ipmievd into /usr/sbin/.
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Thu, 7 Apr 2005 01:18:44 +0200
|
|
||||||
|
|
||||||
ipmitool (1.8.0-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Initial upload into Debian, based on the upstream build
|
|
||||||
rules. (Closes: #299924)
|
|
||||||
* Convert debian/changelog to UTF-8.
|
|
||||||
* Change section from 'contrib' to 'utils'.
|
|
||||||
* Build-depend on debhelper (>> 4.0.0) to match the rules file.
|
|
||||||
* Set Standards-version to 3.6.1.
|
|
||||||
* Make sure binary dependency is properly generated.
|
|
||||||
* Add long description, copied from the project README.
|
|
||||||
* Drop useless provides 'ipmitool', as the package is called 'ipmitool'.
|
|
||||||
* Don't install the COPYING file, as the license text already is
|
|
||||||
included in debian/copyright.
|
|
||||||
* Remove unused parts of the rules file.
|
|
||||||
* Correct clean target in rules file, to use 'distclean' and remove
|
|
||||||
configure-stamp not bogus config-stamp.
|
|
||||||
|
|
||||||
-- Petter Reinholdtsen <pere@debian.org> Sun, 3 Apr 2005 20:52:02 +0200
|
|
||||||
|
|
||||||
ipmitool (1.8.0) unstable; urgency=low
|
|
||||||
|
|
||||||
* Fix IPMIv2.0 issues
|
|
||||||
* Fix chassis boot parameter support
|
|
||||||
* Add support for linear sensors
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Wed, Mar 16 2005 17:08:12 -0700
|
|
||||||
|
|
||||||
ipmitool (1.7.1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Update bmc plugin to work with new Solaris bmc driver (new ioctl
|
|
||||||
for interface detection and new STREAMS message-based interface).
|
|
||||||
|
|
||||||
-- Seth Goldberg <sethmeisterg@hotmail.com> Mon, Mar 7 2005 18:03:00 -0800
|
|
||||||
|
|
||||||
ipmitool (1.7.0) unstable; urgency=low
|
|
||||||
|
|
||||||
* Propogate errors correctly so exit status will be useful
|
|
||||||
* More consistent display of errors including completion code text
|
|
||||||
* Errors and debug is send to stderr now
|
|
||||||
* New "sel get" command that will print details about SEL entry
|
|
||||||
and corresponding SDR records as well as FRUs via entity association
|
|
||||||
* Improved event generator, now supports reading events from text file
|
|
||||||
* New "-o oemtype" option for specifying OEM boards
|
|
||||||
exsting types are "supermicro" and "intelwv2"
|
|
||||||
* New PEF subsystem
|
|
||||||
* New "bmc" plugin for Solaris 10 x86
|
|
||||||
* Many bugfixes and contributed patches
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Fri, Jan 7 2005 19:58:22 -0700
|
|
||||||
|
|
||||||
ipmitool (1.6.2) unstable; urgency=low
|
|
||||||
|
|
||||||
* Support for Supermicro BMC OEM authentication method
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Mon, 16 Nov 2004 08:20:01 -0700
|
|
||||||
|
|
||||||
ipmitool (1.6.1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Fix minor problem with LAN parameter setting
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Wed, 29 Sep 2004 11:19:17 -0700
|
|
||||||
|
|
||||||
ipmitool (1.6.0) unstable; urgency=low
|
|
||||||
|
|
||||||
* Add a README
|
|
||||||
* Add support for IPMIv2 and Serial-over-LAN from Newisys
|
|
||||||
* Add Solaris x86 lipmi interface
|
|
||||||
* Add support for building Solaris packages
|
|
||||||
* Add support for building RPMs as non-root user
|
|
||||||
* Fix segfault when doing "sel list" (from Matthew Braithwaite)
|
|
||||||
* Fix "chassis identify" on some BMCs (from ebrower@sourceforge)
|
|
||||||
* Add "bmc info" and related output (from ebrower@sourceforge)
|
|
||||||
* new "shell" and "exec" commands
|
|
||||||
* lots of other contributed patches
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Thu, 9 Sep 2004 21:39:37 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.9) unstable; urgency=low
|
|
||||||
|
|
||||||
* Add ability to get a particular sensor by name
|
|
||||||
* Add ability to set a particular sensor threshold
|
|
||||||
* Add support for displaying V2 channel authentication levels
|
|
||||||
* Add README for rrdtool scripts in contrib directory
|
|
||||||
* Improve lan interface retry handling
|
|
||||||
* Support prompting for password or reading from environment
|
|
||||||
* Move chaninfo command into channel subcommand
|
|
||||||
* Fix reservation ID handling when two sessions open to BMC
|
|
||||||
* Fix reading of large FRU data
|
|
||||||
* Add configure option for changing binary to ipmiadm for Solaris
|
|
||||||
* Fix compile problem on Solaris 8
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Sat, 27 Mar 2004 00:11:37 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.8) unstable; urgency=low
|
|
||||||
|
|
||||||
* Enable static compilation of interfaces
|
|
||||||
* Fix types to be 64-bit safe
|
|
||||||
* Fix compilation problems on Solaris
|
|
||||||
* Fix multiple big-endian problems for Solaris/SPARC
|
|
||||||
* Fix channel access to save settings to NVRAM
|
|
||||||
* Set channel privilege limit to ADMIN during "access on"
|
|
||||||
* Enable gratuitous ARP in bmcautoconf.sh
|
|
||||||
* Add support for Linux kernel panic messages in SEL output
|
|
||||||
* Add support for type 3 SDR records
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Tue, 27 Jan 2004 16:23:25 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.7) unstable; urgency=low
|
|
||||||
|
|
||||||
* add IPMIv1.5 eratta fixes
|
|
||||||
* additions to FRU printing and FRU multirecords
|
|
||||||
* better handling of SDR printing
|
|
||||||
* contrib scripts for creating rrdtool graphs
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Mon, 5 Jan 2004 17:29:50 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.6) unstable; urgency=low
|
|
||||||
|
|
||||||
* Fix SEL event decoding for generic events
|
|
||||||
* Handle empty SEL gracefully when doing "sel list"
|
|
||||||
* Fix sdr handling of sensors that do not return a reading
|
|
||||||
* Fix for CSV display of sensor readings/units from Fredrik Öhrn
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Thu, 4 Dec 2003 14:47:19 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.5) unstable; urgency=low
|
|
||||||
|
|
||||||
* Add -U option for setting LAN username
|
|
||||||
* Fix -v usage for plugin interfaces
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Tue, 25 Nov 2003 15:10:48 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.4) unstable; urgency=low
|
|
||||||
|
|
||||||
* Put interface plugin API into library
|
|
||||||
* Fix ipmievd
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Fri, 14 Nov 2003 15:16:34 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.3) unstable; urgency=low
|
|
||||||
|
|
||||||
* Add -g option to work with grizzly bmc
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Mon, 3 Nov 2003 18:04:07 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.2) unstable; urgency=low
|
|
||||||
|
|
||||||
* add support for setting gratuitous arp interval
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Fri, 24 Oct 2003 11:00:00 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.1) unstable; urgency=low
|
|
||||||
|
|
||||||
* better SEL support
|
|
||||||
* fix display bug in SDR list
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Wed, 8 Oct 2003 17:28:51 -0700
|
|
||||||
|
|
||||||
ipmitool (1.5.0) unstable; urgency=low
|
|
||||||
|
|
||||||
* more robust UDP packet handling
|
|
||||||
* add Intel IMB driver support
|
|
||||||
* use autoconf/automake/libtool
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Fri, 5 Sep 2003 11:57:32 -0700
|
|
||||||
|
|
||||||
ipmitool (1.2-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* New command line option parsing
|
|
||||||
* More chassis commands supported
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Wed, 2 Apr 2003 17:44:17 -0700
|
|
||||||
|
|
||||||
ipmitool (1.1-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Minor fixes.
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Tue, 1 Apr 2003 14:31:10 -0700
|
|
||||||
|
|
||||||
ipmitool (1.0-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Initial Release.
|
|
||||||
|
|
||||||
-- Duncan Laurie <duncan@iceblink.org> Sun, 30 Mar 2003 21:30:46 -0700
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
Source: ipmitool
|
|
||||||
Section: utils
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: Petter Reinholdtsen <pere@debian.org>
|
|
||||||
Uploaders: Duncan Laurie <duncan@iceblink.org>
|
|
||||||
Build-Depends: debhelper (>> 4.0.0), libreadline5-dev | libreadline-dev, libssl-dev
|
|
||||||
Standards-Version: 3.6.2.1
|
|
||||||
|
|
||||||
Package: ipmitool
|
|
||||||
Architecture: i386 amd64 ia64
|
|
||||||
Depends: ${shlibs:Depends}, lsb-base
|
|
||||||
Suggests: openipmi
|
|
||||||
Description: utility for IPMI control with kernel driver or LAN interface
|
|
||||||
A utility for managing and configuring devices that support the
|
|
||||||
Intelligent Platform Management Interface. IPMI is an open standard
|
|
||||||
for monitoring, logging, recovery, inventory, and control of hardware
|
|
||||||
that is implemented independent of the main CPU, BIOS, and OS. The
|
|
||||||
service processor (or Baseboard Management Controller, BMC) is the
|
|
||||||
brain behind platform management and its primary purpose is to handle
|
|
||||||
the autonomous sensor monitoring and event logging features.
|
|
||||||
.
|
|
||||||
The ipmitool program provides a simple command-line interface to this
|
|
||||||
BMC. It features the ability to read the sensor data repository
|
|
||||||
(SDR) and print sensor values, display the contents of the System
|
|
||||||
Event Log (SEL), print Field Replaceable Unit (FRU) inventory
|
|
||||||
information, read and set LAN configuration parameters, and perform
|
|
||||||
remote chassis power control.
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
This package was debianized by Duncan Laurie before
|
|
||||||
2003-11-18 17:55:21 +0100.
|
|
||||||
|
|
||||||
It was downloaded from <URL:http://ipmitool.sourceforge.net/>
|
|
||||||
|
|
||||||
Upstream Author: Duncan Laurie <duncan@iceblink.org>
|
|
||||||
|
|
||||||
Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
Redistribution of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
Redistribution in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
Neither the name of Sun Microsystems, Inc. or the names of
|
|
||||||
contributors may be used to endorse or promote products derived
|
|
||||||
from this software without specific prior written permission.
|
|
||||||
|
|
||||||
This software is provided "AS IS," without a warranty of any kind.
|
|
||||||
ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
|
||||||
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
|
||||||
SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
|
||||||
FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
|
||||||
OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
|
||||||
SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
|
||||||
OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
|
||||||
PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
|
||||||
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
|
||||||
EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
@ -1,4 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
usr/sbin
|
|
||||||
usr/share/ipmitool
|
|
||||||
usr/share/doc/ipmitool
|
|
@ -1,2 +0,0 @@
|
|||||||
README
|
|
||||||
AUTHORS
|
|
@ -1,99 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: ipmievd
|
|
||||||
# Required-Start: $local_fs $remote_fs $syslog
|
|
||||||
# Required-Stop: $local_fs $remote_fs $syslog
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: S 0 1 6
|
|
||||||
# Short-Description: IPMI event daemon
|
|
||||||
# Description: ipmievd is a daemon which will listen for events
|
|
||||||
# from the BMC that are being sent to the SEL and
|
|
||||||
# also log those messages to syslog.
|
|
||||||
### END INIT INFO
|
|
||||||
#
|
|
||||||
# Author: Elmar Hoffmann <elho@elho.net>
|
|
||||||
# Licence: This script is public domain using the same
|
|
||||||
# licence as ipmitool itself.
|
|
||||||
# Modified by: Petter Reinholdtsen
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
|
||||||
DESC="IPMI event daemon"
|
|
||||||
NAME=ipmievd
|
|
||||||
DAEMON=/usr/sbin/$NAME
|
|
||||||
PIDFILE=/var/run/$NAME.pid
|
|
||||||
SCRIPTNAME=/etc/init.d/$NAME
|
|
||||||
|
|
||||||
# Gracefully exit if the package has been removed.
|
|
||||||
test -x $DAEMON || exit 0
|
|
||||||
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
. /etc/default/rcS
|
|
||||||
|
|
||||||
# Options used by ipmievd.
|
|
||||||
#
|
|
||||||
# "open" uses the asynchronous event notification from the OpenIPMI
|
|
||||||
# kernel driver, "sel" uses active polling of the contents of the SEL
|
|
||||||
# for new events.
|
|
||||||
#
|
|
||||||
# Need to force 'daemon' mode, to make sure messages are sent to
|
|
||||||
# syslog and the program forks into the background.
|
|
||||||
#
|
|
||||||
# Se ipmievd(8) for more info.
|
|
||||||
IPMIEVD_OPTIONS="open daemon"
|
|
||||||
|
|
||||||
# Read config file if it is present.
|
|
||||||
[ -f /etc/default/$NAME ] && . /etc/default/$NAME
|
|
||||||
|
|
||||||
# Backwards compatibility with version 1.8.6-2 and 1.8.6-1. The
|
|
||||||
# variable was renamed to be compatible with upstream, SuSe and RedHat.
|
|
||||||
if [ -n "$IPMIEVD_OPTS" ]; then
|
|
||||||
echo "warning: /etc/default/$NAME variable IPMIEVD_OPTS should be renamed to IPMIEVD_OPTIONS"
|
|
||||||
IPMIEVD_OPTIONS="$IPMIEVD_OPTS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Function that starts the daemon/service.
|
|
||||||
#
|
|
||||||
d_start() {
|
|
||||||
start-stop-daemon --start --quiet --exec $DAEMON -- $IPMIEVD_OPTIONS
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Function that stops the daemon/service.
|
|
||||||
#
|
|
||||||
d_stop() {
|
|
||||||
start-stop-daemon --stop --quiet --name $NAME --exec $DAEMON
|
|
||||||
}
|
|
||||||
|
|
||||||
CODE=0
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
[ "$VERBOSE" != no ] && log_begin_msg "Starting $DESC" "$NAME"
|
|
||||||
d_start || CODE=$?
|
|
||||||
[ "$VERBOSE" != no ] && log_end_msg $CODE
|
|
||||||
exit $CODE
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
log_begin_msg "Stopping $DESC" "$NAME"
|
|
||||||
d_stop || CODE=$?
|
|
||||||
log_end_msg $CODE
|
|
||||||
exit $CODE
|
|
||||||
;;
|
|
||||||
restart|force-reload)
|
|
||||||
log_begin_msg "Restarting $DESC" "$NAME"
|
|
||||||
d_stop || true
|
|
||||||
sleep 1
|
|
||||||
d_start || CODE=$?
|
|
||||||
log_end_msg $CODE
|
|
||||||
exit $CODE
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit 0
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user