เช็กซัม: CC_BASE, CC_EXT, CC_DMI และเพจ CMIS
สเปกการจัดการทุกฉบับปกป้องบล็อกข้อมูลระบุตัวตนของตัวเองด้วยเช็กซัมอย่างน้อยหนึ่งตัว — ไบต์เดียวที่ให้โฮสต์ตรวจพบ EEPROM ที่เสียหายหรือเขียนไม่ครบก่อนที่จะเชื่อถือเนื้อหาในนั้น การคำนวณเช็กซัมทำได้ง่ายมากแต่ก็ลืมง่ายเช่นกัน: เช็กซัมที่ค้างจากของเก่าหลังแก้ไขคือสาเหตุที่พบบ่อยที่สุดที่ทำให้โมดูลที่เพิ่งเขียนโค้ดใหม่ถูกรายงานว่า invalid
อัลกอริทึม
ทั้งหมดใช้กฎเดียวกัน: บวกไบต์ในช่วงที่ครอบคลุมโดยถือเป็นค่า 8 บิตแบบไม่มีเครื่องหมาย แล้วเก็บ 8 บิตต่ำของผลรวมไว้ (ผลรวม modulo 256) ไม่ใช่ CRC ไม่ใช่พอลิโนเมียล
sum = 0
for each byte b in range:
sum = (sum + b) & 0xFF
checksum = sum
ตัวอย่าง — ไบต์ห้าตัวแรกของ SFP แบบ 10GBASE-SR: 03 04 07 10 00 → 3 + 4 + 7 + 16 + 0 = 30 = 1Eh ทำต่อไปจนถึงไบต์ 62 แล้วผลลัพธ์ที่ได้คือ CC_BASE
แต่ละเช็กซัมอยู่ที่ไหน
| สเปก | เช็กซัม | ตำแหน่ง | ครอบคลุม |
|---|---|---|---|
| SFF-8472 (SFP) | CC_BASE | A0h ไบต์ 63 | A0h ไบต์ 0–62 |
| SFF-8472 | CC_EXT | A0h ไบต์ 95 | A0h ไบต์ 64–94 |
| SFF-8472 | CC_DMI | A2h ไบต์ 95 | A2h ไบต์ 0–94 (ค่าเกณฑ์และค่าคงที่การสอบเทียบ) |
| SFF-8636 (QSFP) | CC_BASE | ไบต์ 191 | เพจบน 00h ไบต์ 128–190 |
| SFF-8636 | CC_EXT | ไบต์ 223 | ไบต์ 192–222 |
| INF-8077i (XFP) | CC_BASE | ไบต์ 191 | ไบต์ 128–190 |
| INF-8077i | CC_EXT | ไบต์ 223 | ไบต์ 192–222 |
| CMIS | เช็กซัมของเพจ | เพจ 00h ไบต์ 222 | เพจ 00h ไบต์ 128–221 |
| CMIS | เช็กซัมของเพจ | เพจ 01h ไบต์ 255 | เพจ 01h ไบต์ 130–254 (ไบต์ 128–129 เก็บเวอร์ชันเฟิร์มแวร์ที่ไม่ได้ใช้งานอยู่ และไม่รวมอยู่ในการคำนวณ) |
| CMIS | เช็กซัมของเพจ | เพจ 02h ไบต์ 255 | เพจ 02h ไบต์ 128–254 |
| CMIS | เช็กซัมของเพจ | เพจ 04h ไบต์ 255 | เพจ 04h ไบต์ 128–254 |
สิ่งที่ไม่มีเช็กซัมใดครอบคลุม: พื้นที่เฉพาะของผู้ผลิต (SFP A0h 96–127, QSFP 224–255, CMIS 223–255), EEPROM สำหรับผู้ใช้, ค่าที่ตรวจวัดและแฟล็กแบบสด, ค่าเกณฑ์ในเพจ 03h ของ QSFP และเพจเลนของ CMIS ผู้ผลิตอาจเพิ่มฟิลด์ตรวจสอบความถูกต้องของตัวเองในพื้นที่เฉพาะของผู้ผลิต — สิ่งเหล่านั้นไม่ได้เป็นส่วนหนึ่งของสเปก
โฮสต์ทำอะไรกับค่าเหล่านี้
| พฤติกรรม | ผลลัพธ์เมื่อเช็กซัมผิดพลาด |
|---|---|
| ตรวจสอบ CC_BASE (สวิตช์และเราเตอร์ส่วนใหญ่) | โมดูลแสดงผลเป็น invalid, unsupported หรือ EEPROM checksum error; พอร์ตอาจเข้าสถานะ errdisable; เลเซอร์มักถูกปิดไว้ |
| ตรวจสอบ CC_EXT ด้วย | เหมือนกัน หรือบันทึกเป็นแค่ log entry แล้วแต่แพลตฟอร์ม |
| ตรวจสอบ CC_DMI | DDM แสดงผลเป็น not supported หรือไม่นำค่าไปใช้; ตัวลิงก์เองไม่ได้รับผลกระทบ |
| ไม่ตรวจสอบเช็กซัม (NIC หลายรุ่น สวิตช์แบบเปิดบางรุ่น) | โมดูลทำงานได้ปกติ; ข้อผิดพลาดปรากฏเฉพาะในเครื่องมือเท่านั้น |
ข้อผิดพลาดของเช็กซัมจะถูกรายงานพร้อมกับข้อมูลระบุตัวตน ดังนั้นโมดูลที่มีปัญหาเรื่องนโยบายด้วยจะแสดงข้อความหนึ่งบดบังอีกข้อความหนึ่งไว้ — ตรวจเช็กซัมก่อนเสมอ เพราะเป็นทางแก้ที่ง่ายที่สุด แผนที่อาการ: ดัชนีอาการ
เมื่อใดที่ต้องคำนวณใหม่
- หลังแก้ไขสิ่งใดก็ตามในช่วงที่ครอบคลุม — ชื่อผู้ผลิต หมายเลขชิ้นส่วน หมายเลขซีเรียล รหัสวันที่ รหัสความสอดคล้อง ความยาวคลื่น ความยาว ตัวเลือก คลาสกำลังไฟ
- หลังใส่ค่าเกณฑ์หรือค่าคงที่การสอบเทียบบน SFP (CC_DMI)
- หลังกู้คืนอิมเมจบางส่วนจากโมดูลอื่น
- ไม่จำเป็นสำหรับการเปลี่ยนแปลงในพื้นที่เฉพาะของผู้ผลิต, EEPROM สำหรับผู้ใช้ หรือไบต์ควบคุมใน A2h
ลำดับขั้นตอน: แก้ไข → คำนวณเช็กซัมทุกตัวที่ได้รับผลกระทบใหม่ → เขียน → อ่านกลับมาตรวจสอบ → ยืนยันผล การเขียนไบต์เช็กซัมก่อนข้อมูลที่มันครอบคลุมจะเปิดช่องให้ไฟดับกลางคันทำให้โมดูลกลายเป็นโมดูลที่ใช้งานไม่ได้
เช็กซัมกับการล็อกผู้ผลิต
เช็กซัมที่ถูกต้องเป็นสิ่งจำเป็น แต่ไม่ใช่สิ่งเดียวที่เพียงพอ แพลตฟอร์มที่เข้มงวดยังตรวจสอบบล็อกของผู้ผลิตด้วย และในดีไซน์ที่ถูกล็อก ยังมีลายเซ็นเฉพาะของผู้ผลิตในพื้นที่เฉพาะของผู้ผลิตที่เช็กซัมของสเปกไม่รู้จักเลย การผ่าน CC_BASE แต่ข้อมูลระบุตัวตนถูกปฏิเสธ มีลักษณะเหมือนกรณี การล็อกผู้ผลิต ไม่ใช่ปัญหาเช็กซัม — การล็อกผู้ผลิต, ฟิลด์ของผู้ผลิต
ใน CodingBox
CodingBox คำนวณ CC_BASE, CC_EXT, CC_DMI และเช็กซัมของเพจ CMIS ใหม่โดยอัตโนมัติทุกครั้งที่เขียน และไฮไลต์ให้เห็นเมื่อค่าไม่ตรงกันขณะอ่านโมดูล — ฟิลด์เช็กซัมที่ขึ้นสีแดงใน Check transceiver หรือใน EEPROM editor หมายความว่าโมดูลถูกแก้ไขจากที่อื่นโดยไม่ได้แก้เช็กซัมให้ตรง หรือ EEPROM เสียหาย
ตำแหน่งของแต่ละเช็กซัมเทียบกับไบต์ข้างเคียง: SFF-8472 A0h (63, 95), A2h (95), SFF-8636 เพจบน (191, 223), CMIS เพจบน (222, 255), XFP (191, 223)