PEL: Add ExtendedUserHeader section class

This is a required PEL section.

The section contains:
* The machine type/model/SN
* The server firmware version
* The BMC firmware version
* The 'Event Common Reference Time' (not used yet)
* The symptom ID (a unique event signature)

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I223041f85965195fccf69542dbe86ce856073b36
diff --git a/test/openpower-pels/pel_utils.cpp b/test/openpower-pels/pel_utils.cpp
index 5fdab54..18095a1 100644
--- a/test/openpower-pels/pel_utils.cpp
+++ b/test/openpower-pels/pel_utils.cpp
@@ -81,19 +81,43 @@
     ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
     ' ', ' '};
 
-std::vector<uint8_t> failingMTMSSection{
+const std::vector<uint8_t> failingMTMSSection{
     // Header
     0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20, 0x00,
 
     'T',  'T',  'T',  'T',  '-',  'M',  'M',  'M',  '1', '2',
     '3',  '4',  '5',  '6',  '7',  '8',  '9',  'A',  'B', 'C'};
 
-std::vector<uint8_t> UserDataSection{
+const std::vector<uint8_t> UserDataSection{
     // Header
     0x55, 0x44, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00,
 
     0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
 
+const std::vector<uint8_t> ExtUserHeaderSection{
+    // Header
+    'E', 'H', 0x00, 0x60, 0x01, 0x00, 0x03, 0x04,
+
+    // MTMS
+    'T', 'T', 'T', 'T', '-', 'M', 'M', 'M', '1', '2', '3', '4', '5', '6', '7',
+    '8', '9', 'A', 'B', 'C',
+
+    // Server FW version
+    'S', 'E', 'R', 'V', 'E', 'R', '_', 'V', 'E', 'R', 'S', 'I', 'O', 'N', '\0',
+    '\0',
+
+    // Subsystem FW Version
+    'B', 'M', 'C', '_', 'V', 'E', 'R', 'S', 'I', 'O', 'N', '\0', '\0', '\0',
+    '\0', '\0',
+
+    0x00, 0x00, 0x00, 0x00,                         // Reserved
+    0x20, 0x25, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, // Ref time
+    0x00, 0x00, 0x00,                               // Reserved
+
+    // SymptomID length and symptom ID
+    20, 'B', 'D', '8', 'D', '4', '2', '0', '0', '_', '1', '2', '3', '4', '5',
+    '6', '7', '8', '\0', '\0', '\0'};
+
 const std::vector<uint8_t> srcFRUIdentityCallout{
     'I', 'D', 0x1C, 0x1D,                     // type, size, flags
     '1', '2', '3',  '4',                      // PN
@@ -140,7 +164,9 @@
                         failingMTMSSection.end());
             data.insert(data.end(), UserDataSection.begin(),
                         UserDataSection.end());
-            data.at(sectionCountOffset) = 5;
+            data.insert(data.end(), ExtUserHeaderSection.begin(),
+                        ExtUserHeaderSection.end());
+            data.at(sectionCountOffset) = 6;
             break;
         case TestPELType::privateHeaderSection:
             data.insert(data.end(), privateHeaderSection.begin(),