เช็กซัม: CC_BASE, CC_EXT, CC_DMI และเพจ CMIS · ข้อกำหนดและมาตรฐาน · ทรานซีฟเวอร์ออปติคัลและสายเคเบิล · เอกสารประกอบ · CodingBox
CodingBox เอกสารประกอบ

เช็กซัม: 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_BASEA0h ไบต์ 63A0h ไบต์ 0–62
SFF-8472CC_EXTA0h ไบต์ 95A0h ไบต์ 64–94
SFF-8472CC_DMIA2h ไบต์ 95A2h ไบต์ 0–94 (ค่าเกณฑ์และค่าคงที่การสอบเทียบ)
SFF-8636 (QSFP)CC_BASEไบต์ 191เพจบน 00h ไบต์ 128–190
SFF-8636CC_EXTไบต์ 223ไบต์ 192–222
INF-8077i (XFP)CC_BASEไบต์ 191ไบต์ 128–190
INF-8077iCC_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_DMIDDM แสดงผลเป็น 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)


หากพบข้อมูลที่ไม่ถูกต้องหรือข้อผิดพลาดในบทความนี้ ให้เลือกข้อความส่วนนั้นแล้วกด Ctrl+Enter เพื่อ